51nod 最长的循环节(对循环小数位的理解+快速幂+欧拉筛)
最长的循环节
基准时间限制:1 秒 空间限制:131072 KB
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1035
题目:
正整数k的倒数1/k,写为10进制的小数如果为无限循环小数,则存在一个循环节,求<=n的数中,倒数循环节长度最长的那个数,假如存在多个最优的答案,输出所有答案中最大的那个数。
1/6= 0.1(6) 循环节长度为1
1/7= 0.(142857) 循环节长度为6
1/9= 0.(1) 循环节长度为1
Input:
输入n(10≤n≤1000)n(10≤n≤1000)
Output:
输出<=n的数中倒数循环节长度最长的那个数
sample:
input:
10
Output:
7
题解:
这题涉及一个神奇的数学证明,接下来我们证明看看:
首先我们用一个假设一个循环小数看看。
k=ba=0.0......s位(c1c2...cr)r位k=ba=0.0......⏟s位(c1c2...cr)⏟r位
可以看到kk是一位循环位数为rr的循环小数,现在我们把小数点右rr位。由于kk是rr位循环小数,所以小数部分只有前s位改变。当我们把这个数的小数部分与kk的小数部分相减后,小数部分就只剩最多s位了。这是的数可以表示成
k1=(10r−1)∗(b/a)k1=(10r−1)∗(b/a)
我们再右移ss位,这时候就变成了
k2=10s∗(10r−1)∗(b/a)k2=10s∗(10r−1)∗(b/a)
因为bb与aa互质,1010与aa互质,所以要k2k2为整数只有(10r−1)moda=0(10r−1)moda=0.因此有
10r≡1(moda)10r≡1(moda)
得出这个公式之后,我们只要每一个数如果它和10互质,就找出最小的满足公式的rr即可(说白了就是求10关于模a的阶),不过值得注意的是,根据欧拉定理10Φ(a)≡1(moda)10Φ(a)≡1(moda),r一定是Φ(a)Φ(a)的因子,这样就更容易求了。
实在看不懂可以看下这个:
http://w3.math.sinica.edu.tw/math_media/d253/25311.pdf
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e3+5;
int phi[maxn];
void Phi()//欧拉筛
{memset(phi,0,sizeof(phi));phi[1]=1;for(int i=2;i<=maxn;i++){if(!phi[i]){for(int j=i;j<=maxn;j+=i){if(!phi[j])phi[j]=j;phi[j]=phi[j]/i*(i-1);}}
// cout<<i<<" "<<phi[i]<<endl;}
}
int gcd(int a,int b)
{return b?gcd(b,a%b):a;
}
int qpow(int a,int b,int mod)//快速幂
{long long ans=1;while(b){if(b&1) ans=ans*a%mod;a=a*a%mod;b>>=1;}return ans;
}
int main()
{int T,n,i,j,k,temp,ans;Phi();long long sum;cin>>n;int _max=-1;for(i=2;i<=n;i++){temp=gcd(i,10);if(temp!=1)continue;for(j=1;j<=phi[i];j++){if(phi[i]%j==0&&qpow(10,j,i)==1){if(j>_max){_max=j;ans=i;}
// cout<<i<<" "<<j<<endl;break;}}}cout<<ans<<endl;
}
转载于:https://www.cnblogs.com/na7-TRZNDP-Z/p/9782457.html
51nod 最长的循环节(对循环小数位的理解+快速幂+欧拉筛)相关推荐
- 分数换算小数补0法_数学 | 循环小数的循环节以及永远追不上的乌龟
今天带学生做练习,遇到一个循环小数的问题: 题目:0.0909090-的循环节是( ). A.09 B.90 C.090 D.9090 不少学生选择B项90,习题答 ...
- 51Nod 1046 A^B Mod C(日常复习快速幂)
1046 A^B Mod C 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 给出3个正整数A B C,求A^B Mod C. 例如,3 5 8,3^5 Mod 8 = ...
- 最长的循环节 之 有趣的无限循环小数
如题: 1035 最长的循环节 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 正整数k的倒数1/k,写为10进制的小数如果为无限循环小数,则存在一个循环节,求& ...
- 【音频处理】Polyphone 样本编辑 和 样本工具 ( 波形图 | 信息 | 频率分析 | 均衡器 | 播放器 | 终点裁剪 | 自动循环节 | 空白移除 | 音量 平衡 音调 调整 )
文章目录 一. Polyphone 工具简介 1. 相关参考资料 2. 简要介绍 (1) 软件界面 二. 音源编辑 1. 波形图 ( 1 ) 波形图样式 ( 2 ) 波形图操作 2. 信息 ( 1 ) ...
- 嫦娥奔月(KMP,找循环节)及其扩展KMP
问题描述 <归妹>卦辞为:昔者恒我(姮娥)窃毋死之药于西王母,服之以(奔)月.将往,而枚占于有黄.有黄占之曰:"吉.翩翩归妹,独将西行.逢天晦芒,毋惊毋恐,后且大昌". ...
- 【文文殿下】浅谈KMP算法next数组与循环节的关系
KMP算法 KMP算法是一种字符串匹配算法,他可以在O(n+m)的时间内求出一个模式串在另一个模式串下出现的次数. KMP算法是利用next数组进行自匹配,然后来进行匹配的. Next数组 Next数 ...
- 欧拉函数求一个数倒数的循环节长度
首先,费马小定理a与p互素,则a^(p-1)≡1(mod p) 对于一个素数p,取a=10,那么10^(p-1)≡1(mod p) 如果找到一个正整数e使得10^e/p-1/p为整数,那么e就是1 ...
- 求循环小数的表示以及循环节长度
问题:输入整数a和b,输出a/b的循环小数表示以及其循环节长度.例如 a=5 b=43 小数表示为0.(116279069767441860465),循环节长度为21 分析:模拟长除法的计算过程. ① ...
- 薛XX后代的IQ CSU1597【循环节】或【快速幂】
薛先生的后代IQ[循环节]||[快速幂] 薛先生想改变后代的IQ,为此他发明了一种药,这种药有三种属性:A, B, P.他父亲的智商为X,薛先生的智商为Y,用了这种药之后,薛先生的孩子的智商就可以变为 ...
- hdu4291 暴力循环节+矩阵快速幂
题意: 给你一个关系式,x[n] = 3*x[n-1] + x[n-2],求x(x(x[n]))%1000000007. 思路: 做这个题目要明确一点,就是对于取余操作大多数时 ...
最新文章
- windowsphone开发_[app开发定制公司]开发app需要什么技术呢?
- mysql导出数据 程序_MySQL数据导出与导入程序代码
- 内存泄漏和内存溢出有什么区别
- ios开发 多人语音聊天_微信“暗黑模式”正式上线!语音界面大改,新增贴心“群工具”...
- php比较float大小,PHP中两个float(浮点数)比较实例分析
- 在Visual Studio上开发Node.js程序
- 查看可执行文件的运行架构_在运行查询之前如何查看结果集的架构
- leetcode hot 3-4
- ASP.NET2.0入门经典(第4版)—3.5 服务器控件的类型(2)--zt
- Java SE 8新特性
- java是否安装outlook,Java程序定期检查ms Outlook是否有新邮件
- 基于RV1126平台imx291分析 --- 统计已注册的设备信息
- 麦当劳中国首个IT战略研发中心在南京启用;大食代积极布局中国西南市场 | 美通企业日报...
- Java编写程序获取验证码
- 与你们一起的那些时光
- Vue.js下载与安装
- 小米开箱 (原创)
- CoreML遇到的问题和原因
- rtthread工业使用_RT Thread SPI设备 使用
- 【Akka】Akka Actor生命周期
热门文章
- 普式变换,仿射变换,人脸对齐
- linux发送邮件 脚本,linux脚本发送邮件 shell发送邮件(使用 msmtp+mutt+shell来实现)
- C++ 构造函数后面有冒号 ~ : ()
- springmvc中常见的简单的文件上传和下载
- linux ffmpeg插件,Linux FFmpeg(含x264、lame插件)安装记录
- 正则式转化nfa 代码_从0到1打造正则表达式执行引擎(二)
- 针式打印机打印发虚_针式打印机使用技巧
- maven 编译出错解决
- 串口 浮点数 结构体_quot;结构体quot;和quot;共用体quot;在单片机中的妙用
- 在spring管理的类的要注意问题