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 //劣码