212-K尾相等数
内存限制:64MB时间限制:3000msSpecial Judge: No
题目描述:
输入一个自然数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
#include<stdio.h>
#include<string.h>
int main()
{
int t,i,j,flag,a[1001];
long k,sum;
// freopen("f:\input.txt","r",stdin);
scanf("%d%*c",&t);
while(t--)
{
scanf("%ld",&k);
sum = 1;flag = 0;
memset(a,0,sizeof(a));
for(i = 0;sum < 1000;i++)
sum *= k;
for(j = 0,sum %= 1000,k %= 1000;j < 1000;j++,i++)
{
(a[sum] != 0)?(printf("%d
",a[sum]+i),flag = 1):(a[sum] = i,sum = sum * k % 1000);
if(flag == 1)
break;
}
}
return 0;
}