1 /*K尾相等数 2 时间限制:3000 ms | 内存限制:65535 KB 3 难度:1 4 描述 5 输入一个自然数K(K>1),如果存在自然数M和N(M>N),使得K^M和K^N均大于等于1000,且他们的末尾三位数相等,则称M和N是一对“K尾相等数”。 6 下面请编程求出M+N最小的K尾相等数。 7 输入 8 第一行包含一个正整数T,T<10000,表示有T组数据; 9 随后有N行,每行包括一个整数K(K<2*10^10); 10 输出 11 对于输入的每个整数K,输出对应的M+N的最小值; 12 样例输入 13 1 14 2样例输出 15 120来源 16 POJ 17 上传者 18 王冲5213 19 20 */ 21 #include<stdio.h> 22 int main() 23 { 24 int T; 25 scanf("%d", &T); 26 while(T--) 27 { 28 int k , m = 1, i = 1, j , l , b , c = 0, o; 29 scanf("%d", &l); 30 if( l < 1000 ) 31 { 32 for( i =1; ; i++) 33 { 34 m *= l; 35 if( m >= 1000) 36 break; 37 } 38 } 39 else m = l % 1000; 40 k = i; 41 l %= 1000; 42 o = m % 1000; 43 while(i++) 44 { 45 m = m * l %1000; 46 for( j = k ; j < i; j++) 47 { 48 int n = o; 49 for( b = k; b <= j; b++ ) 50 { 51 if( b == k) ; 52 else 53 n = n*l %1000; 54 } 55 if(m == n) 56 { 57 printf("%d\n", i+j); 58 c = 1; 59 break; 60 } 61 } 62 if( c ) break; 63 } 64 } 65 return 0; 66 } 67 //劣码