首先找到pow(K,N)>1000的最小的N,然后求K的N次方,并保證后三位相同。
如何保證后三位相同,就是對(duì)1000取余數(shù)相同即可;我們利用一個(gè)a[1001]保存每個(gè)余數(shù),其中下標(biāo)表示對(duì)應(yīng)的余數(shù)(對(duì)1000取余數(shù),余數(shù)不可能大于1000),數(shù)組中存儲(chǔ)的為對(duì)應(yīng)的次方,只要找到一個(gè)不是-1的元素則表明尋找到了兩個(gè)滿足條件的元素。
注意使用:(x*y)%c=((x%c)*(y%c))%c
代碼如下:
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
int main(){
int number,M,N;
int a[1001];//用來存儲(chǔ)余數(shù)
cin>>number;
while(number!=0){
memset(a,-1, sizeof(a));//初始化為-1
M=N=0;
while(pow(number,N)<1000)
N++;
int temp=pow(number,N);
temp%=1000;
a[temp]=N;
for(M=N+1;;M++){
temp=((number%1000)*temp)%1000; //(x*y)%c=((x%c)*(y%c))%c
if(a[temp]==-1)
a[temp]=M;
else
break;
}
cout<<M+a[temp]<<endl;
cin>>number;
}
return 0;
}