51NOD 1035 最长的循环节(数论)
来源:互联网 发布:base64 json解析 编辑:程序博客网 时间:2024/05/17 22:22
传送门
正整数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)
Output
输出<=n的数中倒数循环节长度最长的那个数
Input示例
10
Output示例
7
解题思路:
因为是求的 1/x 的最长循环节,所以我们可以将1扩大10^1000倍,这里面肯定就会有循环节了,而且我们只需要对 x 取余就行了。也就是求10^k%x,然后找到第一个数,再找到的时候就是循环节了。
正解应该是:
要求一个 10^x≡1(modC) 如果gcd(10,C)!=1的话,显然无解。如果存在解的话,根据欧拉公式,那么这个解 x|phi(C),所以直接暴力枚举x就好了。
My Code(水过):
#include <iostream>#include <cstring>using namespace std;const int MAXN = 1e3+5;int len[MAXN], mod[MAXN];void Init(){ memset(len, 0, sizeof(len)); for(int i=2; i<MAXN; i++) { int ans = 1000000%i, tmp = 1000000%i; if(ans == 0) { len[i] = 0; continue; } for(int j=0; j<MAXN; j++) { ans *= 10; ans %= i; if(ans == tmp) { len[i] = j+1; break; } } } int Max = -1, k; for(int i=2; i<MAXN; i++) { if(len[i] > Max) { Max = len[i]; k = i; } len[i] = k; }}int main(){ Init(); int n; while(cin>>n) { cout<<len[n]<<endl; } return 0;}
1 0
- 51NOD 1035 最长的循环节(数论)
- 51nod - 1035 最长的循环节 - 数论
- 51nod oj 1035 最长的循环节 简单数论
- 51Nod-最长的循环节(数论)
- 51nod 1035:最长的循环节
- 51nod 1035 最长的循环节
- 51NOD 1035 最长的循环节
- 51nod 1035 最长的循环节
- 51nod-【1035 最长的循环节】
- 51Nod 1035 最长的循环节
- 51nod 1035 最长的循环节
- 【51Nod】1035 最长的循环节
- 51nod 1035 最长的循环节
- 51nod 1035 最长的循环节
- 51Nod 1035 最长的循环节
- 51nod oj 1035 最长的循环节 【循环】
- [51Nod 1035 最长的循环节] 循环小数的性质
- 51Nod-点头网-1035 最长的循环节
- car的旅行路线
- Xcode报错
- 深入理解Java中的final关键字
- shell 脚本中的$?是什么意思?
- 最全的数组去重方法对比
- 51NOD 1035 最长的循环节(数论)
- 树形dp——没有上司的舞会
- VMware 9 - redHat 6.4-x86_64
- jquery.validate.js之自定义表单验证规则
- 阿里云服务器作为代理服务器加速打开github,oracle,清华tuna,bit等网站(不能科学上网)
- Some Apply For CSS
- dede5.7配置Sphinx支持typeid、mid
- Okio库的使用
- xiaoming.us量化交易