从键盘输入一个自然数K(K>1),若存在自然数M和N(M>N),使得K^M和K^N均大于或等于1000,且他们的末尾三位数相等,输出M+N的最小值
#include<stdio.h>
#include<string.h>
int main()
{
int k;
int a[10000],b[10000];
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
while(scanf("%d",&k)!=EOF)
{
int t=k;
int m=1;
while(1)
{
if(k>=1000) break;
k*=t;
m++;
}
while(1)
{
k%=1000;//因为只比较最后三位
a[k]++;//利用哈希
b[k]+=m;//存储m+n
if(a[k]==2) break;//若有两个相等
k*=t;//这个位置很重要不能放在前面,放在前面k变了,a[k]位置也变化
m++;
}
printf("%d\n",b[k]);
return 0;
}
}