【ACM】K尾相等数
问题描述:
从键盘输入一个自然数K(K>1),若存在自然数M和N(M>N),使得K^M 和K^N均大于或等于1000,且它们的末尾三位数相等,则称M和N是一对"K尾相等数"。请编写程序,输出M+N最小的K尾相等数。
样例:
输入 | 输出 |
2 | 120 |
幂次M | 1 | 2 | 3 | 4 | 5 |
n^M | 10 | 100 | 1000 | 10000 | 100000 |
末尾三位数 | 无 | 无 | 0 | 0 | 0 |
代码如下:
#include <iostream>
using namespace std;
int main(){
int n;
while(cin>>n) {
int arr[1000]={
0
};
bool b = false;
if(n>=1000) {
b = true;
n=n%1000;
}
int c = 0;
int k = 1;
while(true){
c+=1;
k*=n;
if(k>=1000 || b == true) {
k=k%1000;
if(arr[k]==0) {
arr[k]= c;
} else {
break;
}
}
}
cout<<(c+arr[k])<<endl;
}
return 0;
}