题目
题目描述
已知自然数K,若存在自然数M和N(M>N),使得KM和KN均大于或等于1000,且它们的末三位数相等,则称M和N是一对“K尾相等数”请编写一个程序,输出M+N值最小的K尾相等数。
输入描述
输入多组数据,每组一个K.(K>1)
输出描述
输出满足条件中的最小的M+N的值,每组数据一行。
样例输入
2
样例输出
120
代码
#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
using namespace std;
const int N = 1010;
int n;
vector<int> vec[N];
int q[N];
int main(){
while(scanf("%d",&n)!=-1){
for(int i=0;i<N;i++){
vec[i].clear();
}
memset(q,0,sizeof q);
bool flag = false;
q[0] = 1;
if(n>1000) flag = true, n%=1000;
for(int i=1;i<N;i++){
q[i] = (q[i-1] * n) % 1000;
if(q[i-1] * n >= 1000) flag = true;
if(flag) vec[q[i]].push_back(i);
if(vec[q[i]].size()>1) {
cout<<(vec[q[i]][0]+vec[q[i]][1])<<endl;
break;
}
}
// for(int i=0;i<N;i++) sort(vec[i].begin(),vec[i].end());
//
// int res = 2e9;
// for(int i = 0;i<N;i++) if(vec[i].size()>1) res = min(res,vec[i][0]+vec[i][1]);
// printf("%d\n",res);
}
}