您的位置:首页 > 其它

51nod 1035 最长的循环节

2017-07-26 22:59 260 查看


做题之前先看论文:http://web.math.sinica.edu.tw/math_media/d253/25311.pdf

在论文中(二)那里讲的求循环节位数,拿来直接用就搞定了

http://blog.csdn.net/acmore_xiong/article/details/53841575我看这个写的也挺详细。

#include <bits/stdc++.h>
using namespace std;

const int MAXN = 1010;
int res[MAXN];

int mod_pow(int a, int b, int m)
{
int res = 1;
while(b)
{
if(b&1) res = res*a%m;
a = a*a%m;
b >>= 1;
}
return res;
}

int calc(int num)
{
while(num%2 == 0) num/=2;
while(num%5 == 0) num/=5;
if(num == 1) return 1;
int i = 1;
while(mod_pow(10,i,num) != 1) i++;
return i;
}

void init()
{
int temp;
int maxn = 0;
for(int i = 1; i < MAXN; ++i)
{
temp = calc(i);
if(temp > maxn)
{
maxn = temp;
res[i] = i;
}
else
res[i] = res[i-1];

}
}

int main()
{
init();
int n;
cin >> n;
cout << res
<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: