描述
一个自然数K(2≤K),若存在自然数M和N(M大于N),使得K^M和K^N均大于或等于1000,且它们的末尾三位数相等,则称M和N是一对“K尾相等数”。
输入
输入包含若干个测试用例,每个测试用例占一行,为一个自然数K。
输出
对每个测试用例,用一行输出符合要求的最小M+N值。
样例输入
2
样例输出
120
// 在每隔1000后总有3位数相同的数 例如 1234 2234 后面的3位数字相同 “234”
#include <iostream>
using namespace std;
#define len 1000
int a[1001];
int main()
{
int m,s,k,flag;
while(cin>>k)
{
s=1;flag=0; //s用来存储2^n 和2^m
memset(a,0,sizeof(a));
if(k>=len) //如果k>1000就取出后3位
{
k%=len;
flag=1; //标记一下
}
m=1;
while(1)
{
s*=k;
if(s>=len || flag==1) //当s>1000就进入循还
{
if(a[s%len]==0) //将没有出现的项标记
a[s%len]=m; //找到第一个满足m
else
{
a[s%len]+=m; // 如果下次在此处就是要找的n 退出循环
break;
}
flag=1;
}
if(s>=len)
s=s%len; //如果s>len 将s的范围 0--999;
m++; //用来找出 n m
}
cout<<a[s%len]<<endl;
}
return 0;
}
在网上找到以下测试数据:
测试数据:
25
125
1000
1234
111111
1000003
123454321
测试数据结果:
7
6
3
56
52
102
27