http://acm.whu.edu.cn/land/problem/detail?problem_id=1313
数论题目,对1000求余,余数肯定会循环,枚举指数,注意循环的推出条件即可;
Problem 1313 - K尾相等数
Time Limit: 1000MS
Memory Limit: 65536KB
Total Submit: 279 Accepted: 96 Special Judge: No
Total Submit: 279 Accepted: 96 Special Judge: No
Description
从键盘输入一个自然数K(K>1),若存在自然数M和N(M>N),使得K^M和K^N均大于或等于1000、且它们的末尾三位数相等,则称M和N是一对?K尾相等数?。请编写程序,输出M+N值最小的K尾相等数。
Input
输入数据有多组,以0结束。
Output
对于每个输入,输出一行。
Sample Input
2
0
0
Sample Output
120
#include <cstdio>
#include <cstring>
const int maxn=1<<30;
int pre[1010];
int main()
{
int k;
while(scanf("%d",&k)!=EOF){
if(k==0)break;
memset(pre,-1,sizeof(pre));
int Min=maxn;
int f=k,i=1;
while(f<1000){
f*=k;i++;
}
f=f%1000;
pre[f]=i;
while(1){
f=(f%1000)*(k%1000)%1000;
i++;
if(i>=Min)break;
if(pre[f]==-1){
pre[f]=i;
continue;
}
if(i+pre[f]<Min)Min=i+pre[f];
}
printf("%d\n",Min);
}
return 0;
}
数论与循环:寻找K尾相等数
2387

被折叠的 条评论
为什么被折叠?



