WOJ-313-K尾數(shù)相等數(shù)

首先找到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;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容