最長迴圈節模版
阿新 • • 發佈:2018-12-10
//正整數k的倒數1/k,寫為10進位制的小數如果為無限迴圈小數, //則存在一個迴圈節,求<=n的數中,倒數迴圈節長度最長的那個數, //假如存在多個最優的答案,輸出所有答案中最大的那個數。
/*
*如果1<=b<a,a沒有2或5的質因子,並且a與b互質,那麼b/a 的迴圈節位數恰好等於e 滿足min(10^e≡1(moda))),e是正整數。 *如果1<=b<a,a沒有2或5的質因子,並且a與b互質,那麼b/a 的迴圈節位數必整除ϕ(a)。
*/
#include<stdio.h> #include<bits/stdc++.h> #define ll long long int #define met(a) memset(a,0,sizeof(a)) #define fup(i,a,n,b) for(int i=a;i<n;i+=b) #define fow(j,a,n,b) for(int j=a;j>0;j-=b) using namespace std; const int maxn = 1e6 + 7; int main(int argc, char *argv[]) { int n,ans=1,maxx=0; scanf("%d", &n); for (int i = 2; i <= n; i++) { int tmp = i, tmp1 = 1, tmp2 = 0; while (tmp % 2 == 0)tmp /= 2; while (tmp % 5 == 0)tmp /= 5; if (tmp == 1)tmp2 = 0; else { do { tmp1 = tmp1 * 10 % tmp; ++tmp2; } while (tmp1 != 1); } if (tmp2 > maxx) { maxx = tmp2; ans = i; } } printf("%d\n", ans); return 0; }