NYOJ 212
K尾相等数
时间限制:3000 ms | 内存限制:65535 KB
难度:1
- 描述
- 输入一个自然数K(K>1),如果存在自然数M和N(M>N),使得K^M和K^N均大于等于1000,且他们的末尾三位数相等,则称M和N是一对“K尾相等数”。下面请编程求出M+N最小的K尾相等数。
- 输入
- 第一行包含一个正整数T,T<10000,表示有T组数据;
随后有N行,每行包括一个整数K(K<2*10^10); - 输出
- 对于输入的每个整数K,输出对应的M+N的最小值;
- 样例输入
-
1 2
- 样例输出
-
120
1 2 #include <stdio.h> 3 #include <string.h> 4 int main() 5 { 6 int i,j,k,T; 7 int num; 8 int res = 1,step; 9 scanf("%d",&T); 10 int ans[1000]; 11 while(T--) 12 { 13 res = 1; 14 step = 0; 15 memset(ans,0,sizeof(ans)); 16 scanf("%d",&num); 17 while(res<1000) 18 { 19 step++; 20 res *= num; 21 } 22 num %= 1000; 23 res %= 1000; 24 ans[res] = step; 25 while(1) 26 { 27 res = res*num%1000; 28 step++; 29 if(ans[res]) 30 { 31 printf("%d\n",ans[res]+step); 32 break; 33 } 34 else 35 ans[res] = step; 36 } 37 } 38 return 0; 39 } 40 41 42 43
作者:火星十一郎
本文版权归作者火星十一郎所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.