sdibt K尾相等数

来源:互联网 发布:windows开启samba 编辑:程序博客网 时间:2024/04/24 09:20

从键盘输入一个自然数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;   }}


 

原创粉丝点击