锘??xml version="1.0" encoding="utf-8" standalone="yes"?>久久国产成人,久久久久亚洲AV无码专区体验,99久久超碰中文字幕伊人http://m.shnenglu.com/csu-yx-2013/category/19722.htmlAlgorithm Study And So Onzh-cnFri, 13 Sep 2013 11:18:10 GMTFri, 13 Sep 2013 11:18:10 GMT60poj 1006 Biorhythms 涓浗鍓╀綑瀹氱悊http://m.shnenglu.com/csu-yx-2013/archive/2012/10/03/192726.htmlyxyxWed, 03 Oct 2012 15:11:00 GMThttp://m.shnenglu.com/csu-yx-2013/archive/2012/10/03/192726.htmlhttp://m.shnenglu.com/csu-yx-2013/comments/192726.htmlhttp://m.shnenglu.com/csu-yx-2013/archive/2012/10/03/192726.html#Feedback0http://m.shnenglu.com/csu-yx-2013/comments/commentRss/192726.htmlhttp://m.shnenglu.com/csu-yx-2013/services/trackbacks/192726.html   榪欓涓昏鏄彲浠ョ敤涓浗鍓╀綑瀹氱悊鏉ュ仛銆?br />   鏍規嵁棰樻剰鍙互鎶借薄鍑鴻繖鏍風殑妯″瀷銆傜粰鍑轟笁涓暟A,B,C鍒嗗埆鏄ā23,28,33鍚庣殑浣欐暟錛屾眰鏈灝忕殑鏁板瓧
浣垮緱鍏舵ā23,28,33鍒嗗埆涓篈,B,C錛屽茍涓旇澶т簬緇欏畾鐨勬暟瀛桪銆?br />   涓浗鍓╀綑瀹氱悊寰堝ソ鐨勮В鍐充簡榪欑浣欐暟闂銆備護妯℃暟涓篘i,浣欐暟涓篈i,璁綧i = N1*N2*...*Ni-1*Ni+1*...*Nn錛?br />閭d箞絳旀涓瀹氭弧瓚沖艦寮廰ns = ΣAi*Mi*(Mi瀵筃i鐨勪箻娉曢? % N銆?N涓烘墍鏈塏i鐨勪箻縐?銆?br />   寰堟槑鏄撅紝鐢變簬ans鐨勭i欏規湁Mi鍥犲瓙錛屾墍浠ユāN1-Ni-1鍜孨i+1-Nn鑲畾鏄?錛岃孉i*Mi*(Mi瀵筃i鐨勪箻娉曢? %Ni
灝辨槸Ai銆傝繖鏍峰氨婊¤凍浜嗚姹傘?br />   浠g爜濡備笅錛?br />
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <vector>
using namespace std;

int Egcd(int nN, int nM, int& nX, int& nY)
{
    if (nM == 0)
    {
        nX = 1, nY = 0;
        return nN;
    }
    int nRet = Egcd(nM, nN % nM, nX, nY);
    int nT = nX;
    nX = nY;
    nY = nT - (nN / nM) * nY;
    return nRet;
}

int main()
{
    int nA, nB, nC, nD;
    int nDays = 21252;
    int nCase = 1;
    
    while (scanf("%d%d%d%d", &nA, &nB, &nC, &nD),
           nA != -1 || nB != -1 || nC != -1 || nD != -1)
    {
        int nFirst = 0;
        nA %= 23;
        nB %= 28;
        nC %= 33;
        int nM1= 28 * 33, nM2 = 23 * 33, nM3 = 23 * 28;
        int nN1, nN2, nN3, nTemp;
        Egcd(23, nM1, nTemp, nN1);
        Egcd(28, nM2, nTemp, nN2);
        Egcd(33, nM3, nTemp, nN3);
        nFirst = (nA * nM1 * nN1 + nB * nM2 * nN2 + nC * nM3 * nN3) % nDays;
        while (nFirst <= nD)nFirst += nDays;
        printf("Case %d: the next triple peak occurs in %d days.\n",
               nCase++, nFirst - nD);
    }
    
    return 0;
}


yx 2012-10-03 23:11 鍙戣〃璇勮
]]>
poj 1811 Prime Test 鏁拌 绱犳暟嫻嬭瘯http://m.shnenglu.com/csu-yx-2013/archive/2012/09/24/191819.htmlyxyxMon, 24 Sep 2012 04:56:00 GMThttp://m.shnenglu.com/csu-yx-2013/archive/2012/09/24/191819.htmlhttp://m.shnenglu.com/csu-yx-2013/comments/191819.htmlhttp://m.shnenglu.com/csu-yx-2013/archive/2012/09/24/191819.html#Feedback0http://m.shnenglu.com/csu-yx-2013/comments/commentRss/191819.htmlhttp://m.shnenglu.com/csu-yx-2013/services/trackbacks/191819.html
#include <stdio.h>
#include <time.h>
#include <math.h>
#include <stdlib.h>
#include <algorithm>
using namespace std;
typedef unsigned long long LL;
#define MAX (5000000)
bool bPrime[MAX];
void InitPrime()
{
    int nMax = sqrt((double)MAX) + 1;
    bPrime[0] = bPrime[1] = true;
    for (int i = 2; i <= nMax; ++i)
    {
        if (!bPrime[i])
        {
            for (int j = 2 * i; j < MAX; j += i)
            {
                bPrime[j] = true;
            }
        }
    }
}
LL multAndMod(LL a, LL b, LL n)
{
    LL tmp = 0;
    while (b)
    {
        if(b & 1)
        {
            tmp = (tmp + a) % n;
        }
        a = (a << 1) % n;
        b >>= 1;
    }
    return tmp;
}
//璁$畻a^u%n
LL ModExp(LL a, LL u, LL n)
{
    LL d = 1;
    a %= n;
    while (u)
    {
        if (u & 1)
        {
            d = multAndMod(d, a, n);
        }
        a = multAndMod(a, a, n);
        u >>= 1;
    }
    return d % n;
}
//鍒ゆ柇nN鏄笉鏄悎鏁?/div>
bool Witness(LL a, LL nN)
{
    LL u = nN - 1, t = 0;//灝唍N-1琛ㄧず涓簎*2^t
    while (u % 2 == 0)
    {
        t++;
        u >>= 1;
    }
    LL x0 = ModExp(a, u, nN);//x鏄痑^u
    LL x1;
    for (int i = 1; i <= t; ++i)
    {
        x1 = multAndMod(x0, x0, nN);
        if (x1 == 1 && x0 != nN - 1 && x0 != 1)
        {
            return true;
        }
        x0 = x1;
    }
    if (x1 != 1)
    {
        return true;
    }
    return false;
}
//绱犳暟嫻嬭瘯
bool MillerRabin(LL nN)
{
    //if (nN < MAX)return !bPrime[nN];
    const int TIME = 10;
    for (int i = 0; i < TIME; ++i)
    {
        LL a = rand() % (nN - 1) + 1;
        if (Witness(a, nN))
        {
            return false;
        }
    }
    return true;
}
LL gcd(LL a, LL b)
{
    if (a < b)swap(a, b);
    while (b)
    {
        LL t = a;
        a = b;
        b = t % b;
    }
    return a;
}
//鍚彂寮忓鎵緉N鐨勫洜瀛?/div>
LL PollardRho(LL n, LL c)
{
    LL i = 1, t = 2;
    LL x, y;
    LL ans;
    srand(time(NULL));  
    y = x = rand() % n;
    while(1)
    {
        i++;
        x = (multAndMod(x, x, n) + c) % n;
        ans = gcd(y - x, n);
        if(ans > 1 && ans < n)
            return ans;
        if(x == y)
            return n;
        if(t == i)
        {
            y = x;
            t <<= 1;
        }
    }
}
LL FindMin(LL nN, LL c)
{
    //printf("nN:%I64u\n", nN);
    if (MillerRabin(nN) || nN <= 1)
    {
        return nN;
    }
    LL p = nN;
    while (p >= nN) p = PollardRho(p, c--);
    if (p > 1)
        p = FindMin(p, c);//鍒嗚Вp鐨勬渶灝忓洜瀛?/div>
    if (p < nN)
    {
        LL q = nN / p;
        q = FindMin(q, c);//鎵懼埌q鐨勬渶灝忓洜瀛?/div>
        p = min(p, q);
    }
    return p;
}
int main()
{
    int nTest;
    srand(time(NULL));
    //InitPrime();
    scanf("%d", &nTest);
    while (nTest--)
    {
        LL nN;
        scanf("%I64u", &nN);
        if (nN > 2 && nN % 2 == 0)
        {
            printf("2\n");
        }
        else if (nN == 2 || MillerRabin(nN))
        {
            printf("Prime\n");
        }
        else
        {
            printf("%I64u\n", FindMin(nN, 181));
        }
    }
    return 0;
}


yx 2012-09-24 12:56 鍙戣〃璇勮
]]>hdu 4294 Multiple 鏁拌 + bfshttp://m.shnenglu.com/csu-yx-2013/archive/2012/09/18/191097.htmlyxyxTue, 18 Sep 2012 05:27:00 GMThttp://m.shnenglu.com/csu-yx-2013/archive/2012/09/18/191097.htmlhttp://m.shnenglu.com/csu-yx-2013/comments/191097.htmlhttp://m.shnenglu.com/csu-yx-2013/archive/2012/09/18/191097.html#Feedback0http://m.shnenglu.com/csu-yx-2013/comments/commentRss/191097.htmlhttp://m.shnenglu.com/csu-yx-2013/services/trackbacks/191097.html   棰樻剰鏄粰鍑篘,K錛屾眰M錛屼嬌寰桵鏄疦鐨勬鍊嶆暟錛岃屼笖M鐢↘榪涘埗琛ㄧず鍚庢墍闇瑕佺殑涓嶅悓鏁板瓧(0,1,2,3,...,k-1)鏈灝戯紝濡傛灉鏈夊緇?br />榪欐牱鐨勬儏鍐碉紝姹傚嚭鏈灝忕殑M銆?br />   寰堟暟瀛︾殑棰樻剰銆傜敤鍒頒簡涓涓粨璁猴紝灝辨槸浠繪剰鏁板瓧鐨勬鍊嶆暟鍧囧彲浠ョ敤涓嶈秴榪?涓笉鍚屾暟瀛楃殑鏁板緱鍒般?br />   璇佹槑濡備笅錛?br />   浠繪剰鏁癕 % N 鎬誨叡鏈塏縐嶇粨鏋滐紝鍋囧鏈塏+1涓笉鍚岀殑M錛岄偅涔堣偗瀹氭湁2涓狹瀵筃鍙栨ā鍚庣殑緇撴灉鏄浉鍚岋紝榪欎釜鏄墍璋撻附宸㈠師鐞嗐?br />閭d箞錛屾垜鍙朼,aa,aaa,...,aaaaaaaaaa....錛屾誨叡N+1涓紝鍚屾牱婊¤凍涓婇潰鐨勭粨璁恒傞偅涔堟垜鍙栭偅2涓N鍙栨ā鐩稿悓鐨勬暟瀛楃浉鍑忓緱鍒?br />鏁板瓧aaaaa...000....錛岃繖涓暟瀛楄偗瀹氭槸N鐨勫嶆暟銆?br />   緇煎悎涓婇潰鐨勮瘉鏄庯紝鍙兘寰楀埌2涓暟瀛楄偗瀹氳兘琛ㄧずN鐨勫嶆暟銆備絾鏄笉鑳借褰㈠紡灝辨槸aaaaa...000....銆?br />
   鍒頒簡榪欓噷鎴戣繕鏄竴鐐規濊礬閮芥病鏈夛紝涓鐐歸兘涓嶇煡閬撴庝箞鎼滅儲銆傘傘?br />   鎯充簡1涓灝忔椂錛屾棤澶寸華錛岄棶榪囦簡榪欓鐨勫悓瀛︼紝榪樻槸鏃犲ご緇傜湅瑙i鎶ュ憡錛屼粬浠殑浠g爜鍐欏緱澶墰浜嗭紝瀹屽叏鐪嬩笉鎳傦紝鏃犲ご緇?br />涔熻涔熸槸鎴戝bfs鐞嗚В澶祬錛屾墠鐪嬩笉鎳備粬浠殑鎼滅儲浠g爜銆傝屼笖錛屾垜榪炲彲浠ユ悳绱㈢殑鍦版柟閮芥病鏈夋壘鍒幫紝閮戒笉鐭ラ亾鎼滀粈涔堜簡銆?br />   鎯充簡濂戒箙錛屾槰澶╁悆楗殑鏃跺欙紝緇堜簬鍙戠幇鍙互瀵逛綑鏁拌繘琛屾悳绱€?br />   瀵逛簬浠繪剰鐨凬錛屽叾浣欐暟灝辨槸鑼冨洿鏄痆0, N -1]銆傝繖涓叾瀹炲氨鍙互浠h〃鐘舵佷簡錛屾垨鑰呬唬琛╞fs涓殑鐐逛簡銆備粠褰撳墠浣欐暟杞Щ鍒板叾瀹?br />浣欐暟鐨勬槸MOD * K +  A 鎴栬?MOD * K + B錛屽鏋滆杞Щ鍒板緱浣欐暟浠ュ墠娌¤鎼滆繃錛岄偅灝卞彲浠ヨ漿縐昏繃鍘匯傝繖涓垰濂藉氨鏄竴涓?br />浼樺寲浜嗐備篃鍙互鐪嬫垚鏄瓙闂浜嗐備絾鏄紝dfs瀹屽叏涓嶈銆傚垰寮濮嬬敤dfs錛岀粷瀵圭殑瓚呮椂銆?br />   鐢╠fs涔熸槸鎴戝鎬濊礬鐞嗚В涓嶆繁錛屼莖騫歌涓鴻兘榪囥傘傘傚悗闈㈠彂鐜幫紝榪欓瀹屽叏鍜宐fs鍚誨悎銆俒0, N -1]鍒氬ソ浠h〃N涓偣錛屾垜瑕侀氳繃
浠庡闈㈢殑涓涓偣錛屾渶鐭殑閬嶅巻鍒扮偣0錛屽彲浠fs鎴栬呮渶鐭礬綆楁硶銆傝繖棰樻垜瑙夊緱榪樻湁涓毦鐐瑰氨鏄繚瀛樼瓟妗堬紝鍥犱負絳旀鏈闀跨殑闀垮害
鍙兘鏄疦(N<=10000)錛屾墍浠ユ妸絳旀鐩存帴鏀懼埌鑺傜偣閲岄潰鑲畾涓嶈鐨勩備絾鏄紝鎴戣繕浠旂粏鐪嬭繃綆楁硶瀵艱銆傚洜姝ゆ兂鍒頒簡鍙互鍒╃敤bfs
鎼滅儲鍑烘潵鐨勯偅棰楁爲鎴栬呮渶鐭礬綆楁硶璺戝嚭鏉ョ殑閭i鏍戯紝浠庣洰鏍囪妭鐐歸嗗簭瀵繪壘絳旀錛屾壘鍒板嚭鍙戣妭鐐逛箣鍚庯紝鍐嶆妸絳旀reverse涓涓嬪氨琛屼簡銆?br />   榪欓榪樺緱娉ㄦ剰0涓嶈兘鏄疦鐨勫嶆暟錛屾墍浠ユ敞鎰廱fs(0,i)榪欑鎯呭喌鐨勫鐞嗐?br />
   浠g爜濡備笅錛?br />
#include <stdio.h>
#include <string.h>
#include <queue>
#include <algorithm>
using namespace std;

const int MAX_N = 10010;
int nOut[MAX_N];
int nOLen;
int nAns[MAX_N];
int nALen;
bool bMod[MAX_N];
int nFather[MAX_N];
int nChoose[MAX_N];
int nN;
int nK;
bool bFind;

int Cmp(int* A, int nLA, int* B, int nLB)
{
    if (nLA != nLB)
    {
        return nLA - nLB;
    }
    for (int i = 0; i < nLA; ++i)
    {
        if (A[i] != B[i])
        {
            return A[i] - B[i];
        }
    }
    return 0;
}

void Bfs(int nA, int nB)
{
    memset(bMod, falsesizeof(bMod));
    queue<int> que;
    que.push(0);
    int nTemp;
    bool bFirst = true;
    bFind = false;
    
    if (nA > nB)swap(nA, nB);
    //printf("nA:%d, nB:%d\n", nA, nB);
    while (!que.empty())
    {
        //printf("nMod:%d\n", que.front());
        int nMod = que.front();
        que.pop();
        if (nMod == 0)
        {
            if (bFirst)bFirst = false;
            else
            {
                bFind = true;
                break;
            }
        }
        
        nTemp = (nMod * nK + nA) % nN;
        if (!(nMod == 0 && nA == 0) && !bMod[nTemp])
        {
            nFather[nTemp] = nMod;
            nChoose[nTemp] = nA;
            que.push(nTemp);
            bMod[nTemp] = true;
            //printf("nTemp:%d\n", nTemp);
        }
        if (nA == nB)continue;
        nTemp = (nMod * nK + nB) % nN;
        if (!bMod[nTemp])
        {
            nFather[nTemp] = nMod;
            nChoose[nTemp] = nB;
            que.push(nTemp);
            bMod[nTemp] = true;
            //printf("nTemp:%d\n", nTemp);
        }
    }
    
    if (bFind)
    {
        int nF = 0;
        nALen = 0;
        do
        {
            nAns[nALen++] = nChoose[nF];
            nF = nFather[nF];
        } while (nF);
        reverse(nAns, nAns + nALen);
    }
}

int main()
{
    while (scanf("%d%d", &nN, &nK) == 2)
    {
        bool bOk = false;
        nOLen = 0;
        for (int i = 1; i < nK; ++i)
        {
            Bfs(i, i);
            if (bFind)
            {
                if (nOLen == 0 || Cmp(nOut, nOLen, nAns, nALen) > 0)
                {
                    nOLen = nALen;
                    memcpy(nOut, nAns, sizeof(int) * nALen);
                }
                bOk = true;
            }
        }
        if (!bOk)
            for (int i = 0; i < nK; ++i)
            {
                for (int j = i + 1; j < nK; ++j)
                {
                    Bfs(i, j);
                    if (bFind)
                    {
                        if (nOLen == 0 || Cmp(nOut, nOLen, nAns, nALen) > 0)
                        {
                            nOLen = nALen;
                            memcpy(nOut, nAns, sizeof(int) * nALen);
                        }
                    }
                }
            }
        for (int k = 0; k < nOLen; ++k)
        {
            printf("%d", nOut[k]);
        }
        printf("\n");
    }

    return 0;
}


yx 2012-09-18 13:27 鍙戣〃璇勮
]]>
poj 3243 Clever Yhttp://m.shnenglu.com/csu-yx-2013/archive/2012/08/05/186351.htmlyxyxSun, 05 Aug 2012 07:09:00 GMThttp://m.shnenglu.com/csu-yx-2013/archive/2012/08/05/186351.htmlhttp://m.shnenglu.com/csu-yx-2013/comments/186351.htmlhttp://m.shnenglu.com/csu-yx-2013/archive/2012/08/05/186351.html#Feedback0http://m.shnenglu.com/csu-yx-2013/comments/commentRss/186351.htmlhttp://m.shnenglu.com/csu-yx-2013/services/trackbacks/186351.htmlXY mod Z = K錛岀粰鍑篨錛孼錛孠錛屾眰Y銆?br />   褰揨鏄礌鏁扮殑鏃跺欑洿鎺ョ敤baby-step綆楁硶鍗沖彲浜嗐備絾鏄紝妯℃暟涓嶆槸绱犳暟鐨勬儏鍐墊庝箞鍔炰簡銆?br />   鏂圭▼a^X = b % c錛屽彲浠ヨ繘琛屼竴緋誨垪鐨勮漿鍖栥傚亣璁綿 = gcd(a,c)錛岀敱a^(x-1)*a = b % c錛岀煡閬揳^(x-1)瑕佸瓨鍦ㄥ繀欏繪弧瓚?br />gcd(a,c)|b錛屽鏋滄弧瓚寵繖涓潯浠訛紝閭d箞鎴戜滑鍙互鍦ㄦ柟紼?杈瑰悓鏃墮櫎浠錛屾柟紼嬫槸涓嶅彉鐨勩傚洜涓篴^x = b + k * c錛屽啀闄や互鍏害鏁?br />d錛屽緱鍒版柟紼媋^(x-1)*a/d = b / d + k * c / d銆傛牴鎹互涓婃帹璁猴紝鎴戜滑鍙互涓嶆柇鐨勯櫎浠錛岀洿鍒癵cd(a,c)=1銆?br />   鍋囪鎴戜滑闄や簡k嬈★紝閭d箞鏂圭▼杞寲涓篴^(x-k) * a^k/d^k = b / d^k + k * c / d^k銆備護d = a^k/d^k錛宐' = b / d^k錛?br />c' = c / d^k錛寈' = x - k錛屾柟紼嬭漿鍖栦負a^x' * d = b' % c'錛屽緱鍒癮^x' = b' * d^-1 % c'銆?br />   鐜板湪鐩存帴鐢╞aby-step瑙f柟紼媋^x' = b' * (d^-1) % c'鍗沖彲銆傛敞鎰忓埌x=x'+k錛屽鏋滃瓨鍦▁灝忎簬k鐨勮В錛岄偅涔坸'灝忎簬0錛屼絾鏄?br />鐢眀aby-step鏄笉浼氭眰璐熺殑嬈℃暟鐨勶紝鎵浠ラ渶瑕佸厛鏋氫婦涓涓嬫槸鍚﹀瓨鍦ㄥ皬浜巏鐨勮В錛岀敱浜庤緭鍏ョ殑鏁版嵁涓嶄細瓚呰繃10^9鐨勶紝鍋囪k涓嶈秴榪?0
榪涜鏋氫婦鍗沖彲浜嗐?br />
   浠g爜濡備笅錛?br />
#include <stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;
typedef long long INT;
#define MAX (1000000)
INT nData[MAX];
INT nKey[MAX];

INT HashPos(INT key)
{
    return ((unsigned)(key ^ 0xA5A5A5A5)) % MAX;
}

void HashAdd(INT key, INT data)
{
    INT nPos = HashPos(key);
    while (nData[nPos] != -1)
    {
        nPos = (nPos + 1) % MAX;
    }
    nData[nPos] = data;
    nKey[nPos] = key;
}

INT HashQuery(INT key)
{
    INT nPos = HashPos(key);
    while (nData[nPos] != -1)
    {
        if (nKey[nPos] == key)
        {
            return nData[nPos];
        }
        nPos = (nPos + 1) % MAX;
    }
    
    return -1;
}

INT MultMod(INT nA, INT nB, INT nC)
{
    INT nAns = 0;
    while (nB)
    {
        if (nB & 1)
        {
            nAns = (nAns + nA) % nC;
        }
        nA = (2 * nA) % nC;
        nB >>= 1;
    }
    return nAns;
}

INT PowerMod(INT nA, INT nX, INT nC)
{
    INT nAns = 1;
    nA %= nC;
    while (nX)
    {
        if (nX & 1)
        {
            nAns = MultMod(nAns, nA, nC); 
        }
        nA = MultMod(nA, nA, nC);
        nX >>= 1;
    }
    return nAns;
}

INT gcd(INT nA, INT nB)
{
    if (nA < nB)swap(nA, nB);
    while (nB)
    {
        INT nT = nA;
        nA = nB;
        nB = nT % nB;
    }
    return nA;
}
//d = nA * nX + nB * nY(nA > nB, nA鏄ā鏁?
INT egcd(INT nA, INT nB, INT& nX, INT& nY)
{
    if (nA < nB)swap(nA, nB);
    if (nB == 0)
    {
        nX = 1;
        nY = 0;
        return nA;
    }
    INT nRet = egcd(nB, nA % nB, nX, nY);
    INT nT = nX;
    nX = nY;
    nY = nT - (nA / nB) * nY;
    return nRet;
}

INT GetAns(INT nA, INT nB, INT nC)
{
    if (nC == 0)return -1;
    //鍏堟灇涓?-50,鎵╁睍baby-step鐨勮繃紼嬪彲鑳戒細婕忔帀榪欎簺瑙?/span>
    INT nTemp = 1;
    nB %= nC;
    for (INT i = 0; i <= 50; ++i)
    {
        if (nTemp == nB)
        {
            return i;
        }
        nTemp = MultMod(nTemp, nA, nC);
    }
    
    //濡傛灉nC涓嶆槸绱犳暟,閭d箞鏂圭▼nA^x = nB + k*nC
    
//鍙互涓嶅埌闄や互gcd(nC,nA)
    
//濡傛灉gcd(nC,nA)|nB涓嶆垚绔?鏂圭▼鏃犺В錛?br />    //榪欎釜鐢盿*x=b%c鏈夎В蹇呴』婊¤凍gcd(a,c)|b涓鏍?/span>
    INT d;
    INT nD = 1;//nD鏈鍚庢槸A^k嬈?k鏄痭C涓洜瀛恉鐨勬鏁?/span>
    INT k = 0;
    while ((d = gcd(nC, nA)) != 1)
    {
        k++;
        nC /= d;
        if (nB % d)return -1;
        nB /= d;
        nD = MultMod(nD, nA / d, nC);
    }
    //鐜板湪鏂圭▼杞寲涓簄A^(x-k) * nA^k/d^k = nB/d^k % nC/d^k
    
//鍏跺疄灝辨槸鏂圭▼2渚ч櫎浠^k嬈¤屽凡,榪欐牱鐨勫仛娉曚笌鍘熸柟紼嬫槸絳変環鐨?br />    //浠D = nA^k/d^k,鍒檔A^x'*nD = nB' % nC',
    
//瑙h鏂圭▼,閭d箞x=x'+k
    
//娉ㄦ剰,濡傛灉x<k,閭d箞x'涓鴻礋鏁?baby-step鏃犳硶姹傚嚭,鏁呭湪鍑芥暟寮澶磋繘琛屾灇涓?/span>
    memset(nKey, -1, sizeof(nKey));
    memset(nData, -1, sizeof(nData));
    INT nM = ceil(sqrt(1.0 * nC));
    nTemp = 1;
    for (INT j = 0; j <= nM; ++j)
    {
        HashAdd(nTemp, j);
        nTemp = MultMod(nTemp, nA, nC);
    }
    INT nK = PowerMod(nA, nM, nC);
    for (int i = 0; i <= nM; ++i)
    {
        INT x, y;
        egcd(nC, nD, x, y);//y = nD^-1,nD = nD*(nA^m)^i
        y = (y + nC) % nC;//榪欏彞璇濇槸蹇呴』鐨?y寰堝彲鑳藉氨鏄礋鏁?/span>
        INT nR = MultMod(y, nB, nC);//nR=nB*nD^-1
        int j = HashQuery(nR);
        if (j != -1)
        {
            return nM * i + j + k;
        }
        
        nD = MultMod(nD, nK, nC);
    }
    return -1;
}

int main()
{
    INT nA, nB, nC;
    
    while (scanf("%I64d%I64d%I64d", &nA, &nC, &nB), nA + nB + nC)
    {
        INT nAns = GetAns(nA, nB, nC);
        if (nAns == -1)
        {
            printf("No Solution\n");
        }
        else
        {
            printf("%I64d\n", nAns);
        }
    }
    
    return 0;
}


yx 2012-08-05 15:09 鍙戣〃璇勮
]]>
poj 3696 The Luckiest numberhttp://m.shnenglu.com/csu-yx-2013/archive/2012/08/02/186027.htmlyxyxThu, 02 Aug 2012 05:06:00 GMThttp://m.shnenglu.com/csu-yx-2013/archive/2012/08/02/186027.htmlhttp://m.shnenglu.com/csu-yx-2013/comments/186027.htmlhttp://m.shnenglu.com/csu-yx-2013/archive/2012/08/02/186027.html#Feedback3http://m.shnenglu.com/csu-yx-2013/comments/commentRss/186027.htmlhttp://m.shnenglu.com/csu-yx-2013/services/trackbacks/186027.html鎴戞槸浠涔堟濊礬涔熸病鏈変簡錛屾嫋浜嗗嚑澶╀簡錛屾暟璁烘悶姝繪垜浜嗭紝鍙兘鎵劇瓟妗堜簡銆?br />   鎴戠湅鍒頒釜姣旇緝闈犺氨鐨勬帹娉曘傞鍏堬紝888...=111...*8=(10^0+10^1+...+10^m-1)*8=(10^m - 1)/9*8錛孭S錛歮浠h〃888...鐨勯暱搴︺?br />濂藉惂錛岀粓浜庡寲鎴愭寚鏁頒簡錛岀幇鍦ㄦ湁8*(10^m-1)/9=K*L錛屾渶灝忕殑m灝辨槸鎴戜滑瑕佹眰鐨勭瓟妗堝暒銆?br />
   鏂瑰紡1錛?br />   => 8 * (10^m-1) = 9 * k * L
   => 8/d*(10^m-1)=9*k*L/d錛宒=gcd(8,9L)
   => 10^m-1 = 0 % 9 * L / gcd(8, 9L) = 0 % 9*L/gcd(8,L)錛?鐢變簬gcd(8/d,9L/d)=1錛岄偅涔?0^m-1蹇呯劧鏄?*L/d鐨勫嶆暟浜?銆?br />   => 10^m = 1 % 9 * L / gcd(8,L) 
   鏂瑰紡2錛?br />   => 8*(10^m-1)/9 = 0 % L
   => 8*(10^m-1) = 0 % 9*L(榪欐鐨勬帹鍑猴紝姣斿x/9 = k*n錛岄偅涔坸=9*k*n浜嗭紝鏄劇劧鎴愮珛)
   => 10^m-1 = 0 % 9*L/gcd(9*L,8)錛屽亣濡傦紝d = gcd(9*L,8)錛岄偅涔堟湁8/d*(10^m-1)=k*9*L/d錛屽洜涓?/d涓嶅彲鑳芥槸9  *L / d
鐨勫嶆暟錛屾墍浠?strong>10^m-1蹇呭畾鏄?*L/d鐨勫嶆暟錛屾墍浠?0^m-1 = 0 % 9*L/gcd(9*L,8))錛?>錛?0^m - 1 = 0 % 9 * L / gcd(L, 8),
(鍥犱負gcd(9,8)=1)銆?br />   => 10^m = 1 % 9*L/gcd(8,L)  

   鑷蟲錛?縐嶆柟寮忛兘鎺ㄥ嚭浜嗭紝10^m = 1 % 9*L/gcd(8,L) 銆?br />   閭d箞鎬庝箞瑙g瓟榪欎釜闂浜嗭紝榪欎釜灝辯敤鍒頒簡嬈ф媺瀹氱悊浜嗐備護p = 9 * L / gcd(8,L)錛岄偅涔堟湁10^m = 1 % p銆傜敱嬈ф媺瀹氱悊鐭?Z*p涓墍鏈夌殑
鏁板瓧a鍧囨弧瓚砤^euler(p) = 1 % p銆傞偅涔堬紝10鍙鏄痯鐨勪箻娉曠兢涓氨鑲畾鏈夎В浜嗐傚鏋滐紝10涓嶅湪Z*p涓簡錛岃偗瀹氭槸鏃犺В鐨勩傝瘉鏄庡涓嬶細
鐢盿^x = 1%p錛屽彲浠ュ緱鍒癮^(x-1)*a=1%p錛岃a^(x-1)瀛樺湪錛岄偅涔坓cd(a,p)|1錛岄偅涔坓cd(a,p)蹇呴』鏄?銆?br />   緇間笂鎵榪幫紝瑕佹弧瓚沖紡瀛?strong>a^m=1%p錛屽繀欏籫cd(p,a)=1錛屽嵆a蹇呴』鏄痯鐨勪箻娉曠兢涓殑鏁板瓧銆?br />   鐜板湪鐨勯棶棰樻槸姹傛渶灝忕殑m錛岀敱嬈ф媺瀹氱悊鐭ラ亾a^euler(p)=1%p錛宮鍐嶅ぇ灝卞紑濮嬪驚鐜簡銆備絾鏄痬鍙兘浼氭洿灝忋傛瘮濡傦紝鎴戜滑鐜板湪鐭ラ亾鏈灝忕殑m
鏄痬in錛岄偅涔堟湁a^min=1%p錛屽洜涓鴻婊¤凍a^euler(p)=1%p錛岄偅涔坅^euler(p)鑲畾鑳藉彉鎹㈡垚(a^min)^k,鑷充簬k鏄灝戝氨涓嶇煡閬撲簡錛屽綋鐒?br />涔熷彲浠ユ眰鍑烘潵銆傞偅涔坢in灝辨槸euler(p)鐨勪竴涓洜瀛愶紝鑰屼笖鏄渶灝忕殑涓涓弧瓚砤^min=1%p鐨勫洜瀛愪簡銆?br />   鐜板湪灝卞彲浠ラ氳繃鏋氫婦euler(p)鐨勫洜瀛愶紝鎵懼埌鏈灝忕殑鍥犲瓙min婊¤凍寮忓瓙a^min = 1 % p灝辮兘瑙e喅鏈棶棰樹簡銆?br />   娉ㄦ剰姹俛^m%p鑲畾鏄氳繃綆楁硶瀵艱涓婇潰閭g鏂規硶鐨?O(32)鎴栬匫(64)鐨勫鏉傚害錛岃繕鏈塧*b%m涔熼渶瑕佽嚜宸辨ā鎷燂紝鍥犱負鍙兘a*b灝辨孩鍑轟簡銆?br />   浠g爜濡備笅錛岃矊浼間唬鐮佽繕鍙互閫氳繃鍏跺畠鐨勬敼榪涘姞蹇熷害銆?br />
#include <stdio.h>
#include <math.h>
#include <algorithm>
#include <string.h>
using namespace std;
typedef long long INT;

//10^m = 1 % (9*L / gcd(8, L)),姹傛渶灝弇
//p = 9 * L / gcd(8,L)
//gcd(p,10) != 1鍒檖鏈?鎴栬?鐨勫洜瀛?2^m=1%p鎴栬?br />//5^m=1%p鏃犺В,鍘熷紡鏃犺В
//if(p)绱犳暟,m=euler(p) = p - 1
//鍚﹀垯,m涓瀹氭槸euler(p)鐨勬渶灝忔弧瓚崇瓑寮忕殑鍥犲瓙
//鍥犱負(10^m)^n = 10^euler(p) = 1%p
INT gcd(INT a, INT b)
{
    if (a < b)swap(a, b);
    while (b)
    {
        INT t = a;
        a = b;
        b = t % b;
    }
    return a;
}

INT Euler(INT nN)
{
    INT nAns = 1;
    INT nMax = sqrt((double)nN) + 1;
    for (INT i = 2; i <= nMax; ++i)
    {
        if (nN % i == 0)
        {
            nAns *= i - 1;
            nN /= i;
            while (nN % i == 0)
            {
                nAns *= i;
                nN /= i;
            }
        }
    }
    if (nN != 1)nAns *= nN - 1;
    return nAns;
}

INT MultMod(INT a, INT b, INT mod)
{
    INT ans = 0;
    while (b)
    {
        if (b & 1)
        {
            ans = (ans + a) % mod;
        }
        a = (2 * a) % mod;
        b >>= 1;
    }
    return ans;
}

INT ExpMod(INT base, INT exp, INT mod)
{
    INT ans = 1;
    base %= mod;
    while (exp)
    {
        if (exp & 1)
        {
            ans = MultMod(ans, base, mod);
        }
        base = MultMod(basebase, mod);
        exp >>= 1;
    }
    return ans % mod;
}

INT GetAns(INT p)
{
    INT u = Euler(p);
    INT nMax = sqrt((double)u) + 1;
    INT nAns = u;
    for (INT i = 1; i <= nMax; ++i)
    {
        if (u % i == 0)
        {
            if (ExpMod(10, i, p) == 1)
            {
                nAns = i;
                break;
            }
            if (ExpMod(10, u / i, p) == 1)
            {
                nAns = min(nAns, u / i);
            }
        }
    }
    return nAns;
}

int main()
{
    INT nL;
    INT nCase = 1;
    
    while (scanf("%I64d", &nL), nL)
    {
        INT p = 9 * nL / gcd(nL, 8);
        if (gcd(p, 10) != 1)
        {
            printf("Case %I64d: 0\n", nCase++);
            continue;
        }
        printf("Case %I64d: %I64d\n", nCase++, GetAns(p));
    }
    
    return 0;
}


yx 2012-08-02 13:06 鍙戣〃璇勮
]]>
poj 2480 Longge's problemhttp://m.shnenglu.com/csu-yx-2013/archive/2012/07/31/185736.htmlyxyxTue, 31 Jul 2012 03:47:00 GMThttp://m.shnenglu.com/csu-yx-2013/archive/2012/07/31/185736.htmlhttp://m.shnenglu.com/csu-yx-2013/comments/185736.htmlhttp://m.shnenglu.com/csu-yx-2013/archive/2012/07/31/185736.html#Feedback0http://m.shnenglu.com/csu-yx-2013/comments/commentRss/185736.htmlhttp://m.shnenglu.com/csu-yx-2013/services/trackbacks/185736.htmlΣgcd(i,n)(1<=i<=n)銆傛劅瑙夊ソ濂囪懇鐨勯鐩紝鏁拌鐨勯紜疄姣旇緝闅炬兂錛屾病鐪嬪嚭璺熸鎷夊嚱鏁版湁浠涔堝叧緋匯?br />寰堢籂緇擄紝娌″績鎯呮病鏃墮棿緇х畫鎯充簡銆傜湅浜哾iscussion錛岀劧鍚庡張鍘繪悳浜嗕笅絳旀錛屽彂鐜版湁涓摜浠篃寰楅潪甯鎬笉閿欙紝灝辯湅浜嗕笅鎬濊礬浜嗐?br />   榪欎釜棰樼殑瑙f硶鏄灇涓緄(1<=i<=n)錛屽鏋渋|n錛岄偅涔堢瓟妗堝姞涓奺uler(n/i)*i銆傚叾瀹瀉ns = Σi*euler(n/i)(i<=i<=n鑰屼笖i|n)銆?br />鎰忔濇槸浠?鍒皀鐨勬墍鏈夋暟瀛梚錛屽鏋渋鏄痭鐨勫洜瀛愶紝閭d箞璁$畻i*euler(n/i)錛屽姞鍏ョ瓟妗堜腑錛宔uler鏄鎷夊嚱鏁扮殑鎰忔濄?br />   涓轟粈涔堟槸榪欐牱鐨勪簡銆傛瘮濡傦紝1鍒皀涓湁m涓暟瀛楀拰n鎷ユ湁鍏叡鐨勬渶澶у洜瀛恑錛岄偅涔堝氨闇瑕佹妸m*i鍔犲叆絳旀涓傞棶棰樻槸濡備綍璁$畻m鐨勪釜鏁般?br />鍥犱負gcd(m,n) = i錛屽彲浠ュ緱鍒癵cd(m/i,n/i)=1錛岄偅涔坢/i灝辨槸n/i鐨勪箻娉曠兢涓殑鏁板瓧浜嗭紝閭d箞涓鍏卞瓨鍦╡uler(n/i)涓猰/i浜嗭紝閭d箞灝?br />鍙互鎺ㄥ嚭m鐨勪釜鏁板氨鏄痚uler(n/i)銆?br />   
浠g爜濡備笅:
#include <stdio.h>
#include <math.h>
#define MAX (6000000)
bool bPrime[MAX];

void InitPrime()
{
    int nMax = sqrt((double)MAX) + 1;
    bPrime[0] = bPrime[1] = true;
    for (int i = 2; i <= nMax; ++i)
    {
        if (!bPrime[i])
        {
            for (int j = 2 * i; j < MAX; j += i)
            {
                bPrime[j] = true;
            }
        }
    }
}

bool IsPrime(long long nN)
{
    if (nN < MAX)return !bPrime[nN];
    long long nMax = sqrt((double)nN) + 1;
    for (int i = 2; i <= nMax; ++i)
    {
        if (nN % i == 0)
        return false;
    }
    return true;
}

long long Euler(long long nN)
{
    long long nAns = 1;
    
    //printf("nN:%I64d,", nN);
    if (IsPrime(nN))nAns = nN - 1;
    else
    for (int i = 2; i <= nN; ++i)
    {
        if (nN % i == 0)
        {
            nAns *= i - 1;
            nN /= i;
            while (nN % i == 0)
            {
                nAns *= i;
                nN /= i;
            }
            if (IsPrime(nN))
            {
                nAns *= nN - 1;
                break;
            }
        }
    }
    
    //printf("nAns:%I64d\n", nAns);
    return nAns;
}

int main()
{
    long long nN;
    
    InitPrime();
    while (scanf("%I64d", &nN) == 1)
    {
        long long nAns = 0;
        long long nMax = sqrt((double)nN) + 1e-8;
        for (long long i = 1; i <= nMax; ++i)
        {
            if (nN % i == 0)
            {
                //printf("i:%I64d\n", i);
                nAns += i * Euler(nN / i);
                if (i * i != nN)
                nAns += (nN / i) * Euler(i);
            }
        }
        printf("%I64d\n", nAns);
    }
    
    return 0;
}



yx 2012-07-31 11:47 鍙戣〃璇勮
]]>
poj 1284 Primitive Rootshttp://m.shnenglu.com/csu-yx-2013/archive/2012/07/30/185687.htmlyxyxMon, 30 Jul 2012 14:36:00 GMThttp://m.shnenglu.com/csu-yx-2013/archive/2012/07/30/185687.htmlhttp://m.shnenglu.com/csu-yx-2013/comments/185687.htmlhttp://m.shnenglu.com/csu-yx-2013/archive/2012/07/30/185687.html#Feedback0http://m.shnenglu.com/csu-yx-2013/comments/commentRss/185687.htmlhttp://m.shnenglu.com/csu-yx-2013/services/trackbacks/185687.html1<=x<n}銆傚鏋渘鏄绱犳暟p(澶т簬2鐨勭礌鏁?錛岄偅涔堟弧瓚砱^j={1,2,...,p-1}銆?br />   榪欎釜棰樼洰瑕佹眰姹傚師鏍圭殑涓暟銆傜敱璐歸┈瀹氱悊鐢?瀵逛換鎰?<=x<p錛屽嵆Zp*涓殑鏁板瓧錛岄兘鐢眡^(p-1) = 1 % p銆備粠璐歸┈瀹氱悊鍙互鐪嬪嚭錛?br />鍐嶅線涓嬭綆楀氨寮濮嬪驚鐜簡銆傞偅涔堟湁,x^i%p(1<=i<p) = {1, 2, 3,...,p-1},鎰忔濇槸鑳藉鐢熸垚Zp*涓殑鎵鏈夋暟瀛椼?br />   鏍規嵁涓婇潰鐨勯偅涓紡瀛愬彲浠ュ緱鍒幫紝x^i%(p-1)(1<=i<p) = {0, 1, 2,...,p-2}銆?濡傛灉鐢眊cd(x,p-1) = 1,閭d箞蹇呯劧瀛樺湪鏌愪釜x^i錛?br />浣垮緱x^i*x = (p-1)%p銆?br />   鍥犳鍙互寰楀埌錛屽師鏍圭殑涓暟鏄痯-1鐨勪箻娉曠兢涓厓绱犵殑涓暟錛屼篃灝辨槸嬈ф媺鍑芥暟(p-1)銆?br />
浠g爜濡備笅錛?br />   
#include <stdio.h>
#include <math.h>
#define MAX (5000000)
bool bPrime[MAX];
void InitPrime()
{
    int nMax = sqrt((double)MAX) + 1;
    bPrime[0] = bPrime[1] = true;
    for (int i = 2; i <= nMax; ++i)
    {
        if (!bPrime[i])
        {
            for (int j = 2 * i; j < MAX; j += i)
            {
                bPrime[j] = true;
            }
        }
    }
}
bool IsPrime(int nN)
{
    if (nN < MAX)return !bPrime[nN];
    int nMax = sqrt((double)nN) + 1;
    for (int i = 2; i <= nMax; ++i)
    {
        if (nN % i == 0)
            return false;
    }
    return true;
}
int main()
{
    int nN;
    InitPrime();
    while (scanf("%d", &nN) == 1)
    {
        nN--;
        int nAns = 1;
        if (IsPrime(nN))
        {
            nAns = nN - 1;
        }
        else
        {
            for (int i = 2; i <= nN; ++i)
            {
                if (nN % i == 0)
                {
                    nAns *= i - 1;
                    nN /= i;
                    while (nN % i == 0)
                    {
                        nAns *= i;
                        nN /= i;
                    }
                    if (IsPrime(nN))
                    {
                        nAns *= nN - 1;
                        break;
                    }
                }
            }
        }
        printf("%d\n", nAns);
    }
    return 0;
}


yx 2012-07-30 22:36 鍙戣〃璇勮
]]>
poj 2417 Discrete Logginghttp://m.shnenglu.com/csu-yx-2013/archive/2012/07/29/185562.htmlyxyxSun, 29 Jul 2012 11:38:00 GMThttp://m.shnenglu.com/csu-yx-2013/archive/2012/07/29/185562.htmlhttp://m.shnenglu.com/csu-yx-2013/comments/185562.htmlhttp://m.shnenglu.com/csu-yx-2013/archive/2012/07/29/185562.html#Feedback0http://m.shnenglu.com/csu-yx-2013/comments/commentRss/185562.htmlhttp://m.shnenglu.com/csu-yx-2013/services/trackbacks/185562.html   闂鐨勬剰鎬濇槸緇欏畾绱犳暟P錛岀粰鍑烘柟紼媋^x = b % p錛屾敞鎰忔湁妯$殑鏂圭▼絳夊紡2杈歸兘鏄彇妯℃暟鐨勬剰鎬濄傝В榪欐牱鐨勬柟紼嬫湁涓涓浐瀹氱殑綆楁硶錛?br />鍙仛baby-step綆楁硶銆備絾鏄紝娉ㄦ剰闄愬畾鏉′歡鏄痯蹇呴』鏄礌鏁般?br />   涓嬮潰鐨勫浘鎻忚堪浜嗚繖涓畻娉曪細


   鎰忔濆緢娓呮錛屽氨鏄亣璁緓 = i * m + j錛岄偅涔堟柟紼嬪彲浠ヨ漿鍖栦負b*(a^-m)^i  = a^j % p銆傚厛璁$畻鍑哄彸杈圭殑鍊鹼紝瀛樺偍鍦ㄤ竴寮犺〃閲岄潰錛?br />鐒跺悗浠庡皬鍒板ぇ鏋氫婦宸﹁竟鐨刬錛?<=i<m)錛岀巼鍏堟弧瓚崇瓑寮忕殑灝辨槸鏈灝忕殑瑙銆?br />   poj涓婇潰榪欎釜棰樼敤map瀛樺偍(a^j,j)瀵圭殑鏃跺欎細瓚呮椂錛屾敼鎴恏ash琛ㄥ瓨鍌ㄦ墠鑳借繃錛岄錛屾瘯绔熺悊璁哄鏉傚害涓嶆槸涓涓暟閲忕駭鐨勩傛垜鐨刪ash琛ㄦ槸
寮浜?涓暟緇勶紝涓涓敭錛屼竴涓鹼紝鐢ㄦ潵鐩鎬簰楠岃瘉錛屾Ы鍐茬獊鐨勮瘽錛屼竴鐩村線鍚庢壘浣嶇疆銆傛劅瑙夎繖鏍風殑鍋氭硶娌℃湁閾懼紡hash澶嶆潅搴﹀鉤鍧囩殑鏍峰瓙銆?br />   浠g爜濡備笅錛?br />
#include <stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;

#define MAX (1000000)
long long nData[MAX];
long long nKey[MAX];
long long egcd(long long a, long long b, long long& x, long long& y)
{
    if (b == 0)
    {
        x = 1;
        y = 0;
        return a;
    }
    long long ret = egcd(b, a % b, x, y);
    long long t = x;
    x = y;
    y = t - (a / b) * y;
    return ret;
}

long long GetPos(long long key)
{
     return (key ^ 0xA5A5A5A5) % MAX;
}

void Add(long long key, long long data)
{
    long long nPos = GetPos(key);
    while (nData[nPos] != -1)
    {
        nPos = (nPos + 1) % MAX;
    }
    nData[nPos] = data;
    nKey[nPos] = key;
}

int Query(int key)
{
    int nPos = GetPos(key);
    
    while (nData[nPos] != -1)
    {
        if (nKey[nPos] == key)
        {
            return nData[nPos];
        }
        nPos = (nPos + 1) % MAX;
    }
    return -1;
}

long long BabyStep(long long nA, long long nB, long long nP)
{
    long long nM = ceil(sqrt((double)(nP - 1)));
    long long x, y;
    egcd(nP, nA, x, y);//y鏄痭A%p鐨勪箻娉曢?/span>
    y = (y + nP) % nP;
    long long nTemp = 1;
    long long c = 1;//c鏄痭A鐨?#8212;m嬈?/span>
    memset(nData, -1, sizeof(nData));
    memset(nKey, -1, sizeof(nKey));
    for (long long j = 0; j < nM; ++j)
    {
        Add(nTemp, j);
        nTemp = (nTemp * nA) % nP;
        c = (c * y) % nP;
    }
    
    long long r = nB;
    for (int i = 0; i < nM; ++i)
    {
        long long j = Query(r);
        if (j != -1)
        {
            return i * nM + j;
        }
        r = (r * c) % nP;
    }
    return -1;
}

int main()
{
    long long nP, nB, nN;
    
    while (scanf("%I64d%I64d%I64d", &nP, &nB, &nN) == 3)
    {
        long long nAns = BabyStep(nB, nN, nP);
        if (nAns == -1)printf("no solution\n");
        else printf("%I64d\n", nAns);
    }
    
    return 0;
}


yx 2012-07-29 19:38 鍙戣〃璇勮
]]>
uva 408 - Uniform Generatorhttp://m.shnenglu.com/csu-yx-2013/archive/2012/07/28/185487.htmlyxyxSat, 28 Jul 2012 14:12:00 GMThttp://m.shnenglu.com/csu-yx-2013/archive/2012/07/28/185487.htmlhttp://m.shnenglu.com/csu-yx-2013/comments/185487.htmlhttp://m.shnenglu.com/csu-yx-2013/archive/2012/07/28/185487.html#Feedback0http://m.shnenglu.com/csu-yx-2013/comments/commentRss/185487.htmlhttp://m.shnenglu.com/csu-yx-2013/services/trackbacks/185487.html鏍奸兘閿欎簡錛屽張蹇樿鎵撶┖琛岋紝鏄庢槑瀛楃涓蹭粠25鍒楀紑濮嬶紝涓棿鏄?涓┖鏍肩殑錛屾垜nc鐨勬墦浜?涓┖鏍鹼紝灝眕e浜嗭紝榪樻湁涓嶄粩緇嗙湅杈撳嚭瑕佹眰錛屾病鏈夎緭鍑虹┖
琛岋紝鏈榪戠湡娌$姸鎬佸晩銆?br />   鍏跺疄錛岃繖涓鎯抽氫簡灝卞緢綆鍗曚簡錛岃繕鏄暟璁洪噷闈㈢殑緹ょ殑姒傚康錛屽氨鏄姞娉曠兢鐨勭敓鎴愮兢鍟婏紝鎵撶潃闅忔満鏁扮殑騫屽瓙鑰屽凡銆傜敱浜庡張娌℃湁闄愬畾縐嶅瓙錛岄檺瀹?br />瀵圭瓟妗堜篃娌℃湁褰卞搷錛屽亣璁劇瀛愭槸0錛岄偅涔堟暟鍒楀彲浠ヨ〃紺轟負a*step錛屾暟鍒楄鑳藉鐢熸垚0 - mod-1涓墍鏈夌殑鏁板瓧錛岄偅涔堝氨鏈塧*step = b % mod
(0<=b<mod)銆?br />   鍝堝搱錛屼笂闈㈤偅涓紡瀛愬氨鏄痑*x=b%n榪欎釜綰挎у悓浣欐柟紼嬩簡錛屽彧鏄湁寰堝b浜嗐傝鏂圭▼鏈夎В錛屼笉鏄渶瑕佹弧瓚蟲潯浠秅cd(a,n)|b涔堬紝鎰忔漛鏄?br />gcd(a,n)鐨勬暣鏁板嶄簡銆備絾鏄?<=b<n鍟婏紝b浼氭槸1浜嗭紝閭d箞gcd(a,n)涓瀹氭槸1浜嗗摝銆傞偅涔堢洿鎺ュ垽鏂璯cd(step,mod)鏄惁涓?灝辮浜嗭紝鍝堝搱銆?br />   鍏充簬綰挎у悓浣欐柟紼媋*x=b%n錛岃鏈夎В鐨勬潯浠秅cd(a,n)|b鐨勮В閲婏紝榪樻槸鍙傜湅綆楁硶瀵艱鎴栬呭叾瀹冭祫鏂欏惂銆傘傘?br />
浠g爜灝遍潪甯哥畝鍗曚簡錛屽涓嬶細
#include <stdio.h>
#include <algorithm>
using namespace std;

int gcd(int a, int b)
{
    if (a < b)swap(a, b);
    while (b)
    {
        int t = a;
        a = b;
        b = t % b;
    }
    return a;
}

int main()
{
    int nStep, nMod;
    
    while (scanf("%d%d", &nStep, &nMod) == 2)
    {
        printf("%10d%10d    %s\n\n", nStep, nMod,
               gcd(nStep, nMod) == 1 ? "Good Choice" : "Bad Choice");
    }
    
    return 0;
}


yx 2012-07-28 22:12 鍙戣〃璇勮
]]>
poj 2115 C Looooopshttp://m.shnenglu.com/csu-yx-2013/archive/2012/07/27/185345.htmlyxyxFri, 27 Jul 2012 09:08:00 GMThttp://m.shnenglu.com/csu-yx-2013/archive/2012/07/27/185345.htmlhttp://m.shnenglu.com/csu-yx-2013/comments/185345.htmlhttp://m.shnenglu.com/csu-yx-2013/archive/2012/07/27/185345.html#Feedback0http://m.shnenglu.com/csu-yx-2013/comments/commentRss/185345.htmlhttp://m.shnenglu.com/csu-yx-2013/services/trackbacks/185345.html娉曞璁恒傝繖涓柟紼嬭漿鎹負n*c = (b-a) % 2鐨刱嬈°傛牴鎹暟璁虹殑鐭ヨ瘑錛? ax = b%n錛岄渶瑕佷繚璇乬cd(a,n)|b錛屾剰鎬漛鏄痝cd(a,n)鐨勫嶆暟錛岃繖涓?br />涓涓嬪瓙涔熷緢闅捐В閲婃竻妤氬晩錛屼笉婊¤凍榪欎釜鏉′歡錛屽氨鏄病瑙d簡銆傝繕鏈夛紝濡傛灉鏈夎В鐨勮瘽錛岃В鐨勪釜鏁板氨鏄痙 = gcd(a,n)銆傝屼笖鍏朵腑涓涓В鏄痻0 = x'(b
/ d)錛屽叾涓瓁'鏄敤鎵╁睍嬈у嚑閲屽痙綆楁硶姹傚嚭鏉ョ殑錛屾弧瓚沖叧緋誨紡a*x'+n*y'=d銆?br />   浣嗘槸榪欎釜棰樹笉浠呬粎鐢ㄥ埌鏁拌鐨勮繖浜涚煡璇嗭紝鍥犱負蹇呴』姹傛弧瓚蟲潯浠剁殑鏈灝忚В錛岃屽鏋滄湁瑙g殑璇濇槸d涓紝鑰屼笖婊¤凍瑙 = x0 + i(b/d)錛?br />錛?<=i<=d)銆傛棦鐒惰姹傛渶灝忕殑瑙o紝閭d箞瀵硅Вmod(n/d)鍗沖彲浜嗭紝鍥犱負瀹冧滑涔嬮棿鐨勫樊閮芥槸n/d鐨勫嶆暟銆?br />
   浠g爜濡備笅錛?br />
#include <stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;

//鎵╁睍嬈у嚑閲屽痙綆楁硶
//d = a * x + b * y錛宒鏄痑鍜宐鐨勬渶澶у叕綰︽暟
long long egcd(long long a, long long b, long long& x, long long& y)
{
    if (b == 0)
    {
        x = 1;
        y = 0;
        return a;
    }
    else
    {
        long long nRet = egcd(b, a % b, x, y);
        long long t = x;
        x = y;
        y = t - (a / b) * y;
        return nRet;
    }
}

int main()
{
    long long nA, nB, nC, nK;

    while (scanf("%I64d%I64d%I64d%I64d", &nA, &nB, &nC, &nK),
            nA || nB || nC || nK)
    {
        long long x, y;
        long long n = pow((double)2, (double)nK) + 1e-8;
        long long d = egcd(n, nC, x, y);
        long long b = (nB - nA + n) % n;
        if (b % d)//濡傛灉d | b澶辮觸
        {
            printf("FOREVER\n");
        }
        else
        {
            //printf("y:%I64d, b:%I64d, d:%I64d n:%I64d\n", y, b, d, n);
            y = (y + n) % n;
            long long ans = (y * (b / d)) % (n / d);
            printf("%I64d\n", ans);
        }
    }

    return 0;
}


yx 2012-07-27 17:08 鍙戣〃璇勮
]]>
poj 2407 Relativeshttp://m.shnenglu.com/csu-yx-2013/archive/2012/07/26/185245.htmlyxyxThu, 26 Jul 2012 13:36:00 GMThttp://m.shnenglu.com/csu-yx-2013/archive/2012/07/26/185245.htmlhttp://m.shnenglu.com/csu-yx-2013/comments/185245.htmlhttp://m.shnenglu.com/csu-yx-2013/archive/2012/07/26/185245.html#Feedback0http://m.shnenglu.com/csu-yx-2013/comments/commentRss/185245.htmlhttp://m.shnenglu.com/csu-yx-2013/services/trackbacks/185245.html閭d箞鍏紡n∏(1-1/p)錛屽叾涓璸鏄痭鐨勭礌鏁板洜瀛愶紝灝卞彲浠ュ緱鍒扮洿瑙傜殑鐞嗚В浜嗐備絾鏄綆楃殑鏃跺欙紝浼氬皢榪欎釜寮忓瓙鍙樺艦涓嬶紝寰楀埌鍙﹀涓涓艦寮忋?br />   濡傚浘鎵紺猴細

   浣嗘槸榪欎釜棰橈紝闇瑕佽冭檻涓嬶紝鏈夊彲鑳絥鏄釜澶х礌鏁幫紝鐩存帴榪涜鍥犲瓙鍒嗚В鐨勮瘽浼氳秴鏃剁殑銆傛庝箞鍔炰簡錛屽彧鑳藉湪鍒嗚В鐨勬椂鍊欏垽鏂璶鏄笉鏄凡緇忔垚涓?br />绱犳暟浜嗭紝濡傛灉鏄礌鏁幫紝絳旀鍐嶄箻浠-1灝辮浜嗐備負浜嗗姞蹇垽鏂紝鎴戠敤5mb鐨勭┖闂存悶浜嗕釜绱犳暟琛紝澶т簬5000000鐨勬暟瀛楀彧鑳藉驚鐜垽鏂簡銆?br />
 浠g爜濡備笅錛屾敞鎰忔眰嬈ф媺鍑芥暟鐨勪唬鐮侀儴鍒嗭細
#include <stdio.h>
#include <math.h>
#define MAX (5000000)
bool bPrime[MAX];//false琛ㄧず绱犳暟

void InitPrime()
{
    bPrime[0] = bPrime[1] = true;
    int nMax = sqrt((double)MAX) + 1;
    for (int i = 2; i <= nMax; ++i)
    {
        if (!bPrime[i])
        for (int j = i * 2; j < MAX; j += i)
        {
            bPrime[j] = true;
        }
    }
}

bool IsPrime(int nN)
{
    if (nN < MAX)
    {
        return !bPrime[nN];
    }
    else
    {
        int nMax = sqrt((double)nN) + 1;
        for (int i = 2; i <= nMax; ++i)
        {
            if (nN % i == 0)
            {
                return false;
            }
        }
        return true;
    }
}

int main()
{
    int nN;
    
    InitPrime();
    while (scanf("%d", &nN), nN)
    {
        if (nN == 1){printf("0\n");continue;}
        int nAns = 1;
        for (int i = 2; i <= nN; ++i)
        {
            if (IsPrime(nN))
            {
                nAns *= nN - 1;
                break;
            }
            if (nN % i == 0)
            {
                nAns *= i - 1;
                nN /= i;
                while (nN % i == 0)
                {
                    nAns *= i;
                    nN /= i;
                }
            }
        }
        printf("%d\n", nAns);
    }
    
    return 0;
}



yx 2012-07-26 21:36 鍙戣〃璇勮
]]>
poj 2551 Ones and poj 2262 Goldbach's Conjecturehttp://m.shnenglu.com/csu-yx-2013/archive/2012/07/25/185074.htmlyxyxWed, 25 Jul 2012 14:35:00 GMThttp://m.shnenglu.com/csu-yx-2013/archive/2012/07/25/185074.htmlhttp://m.shnenglu.com/csu-yx-2013/comments/185074.htmlhttp://m.shnenglu.com/csu-yx-2013/archive/2012/07/25/185074.html#Feedback0http://m.shnenglu.com/csu-yx-2013/comments/commentRss/185074.htmlhttp://m.shnenglu.com/csu-yx-2013/services/trackbacks/185074.html鐢ㄤ竴涓猰涔樹互n寰楀埌鐨勭瓟妗堝叏鏄?緇勬垚鐨勬暟瀛楋紝闂?鏈灝忕殑涓暟鏄灝戙傚彲浠ヨ漿鎹負n*m=(k*10+1)錛岄偅涔堝彲浠ュ緱鍒?k*10+1)%n==0銆?br />褰撶劧鏈寮濮嬬殑k鏄?錛岄偅涔堟垜浠笉鏂殑澧為暱k = 錛?0*k+1錛夈傜湅澧為暱澶氬皯嬈★紝灝辨槸鏈夊灝戜釜1浜嗐傚洜涓鴻閬垮厤婧㈠嚭錛屾墍浠ラ渶瑕佷笉鏂?n銆?br />鍥犱負鍚屼綑鐨勬ц川錛屾墍浠ュ彲浠ヤ繚璇?n涔嬪悗絳旀涓嶅彉銆?br />   絎簩涓敤鍒扮礌鏁扮瓫閫夋硶銆傜礌鏁扮瓫閫夋硶鐨勫師鐞嗘槸絳涘幓绱犳暟鐨勫嶆暟錛岀敱浜庢槸浠庡皬寰幆鍒板ぇ鐨勶紝鎵浠ュ綋鍓嶇殑鍊兼病琚瓫鎺夌殑璇濓紝鍒欎竴瀹氭槸绱犳暟錛?br />榪欎釜鍒ゆ柇瀵艱嚧澶嶆潅搴︿笉鏄痭鐨勫鉤鏂廣?br />
   poj 2551 浠g爜錛?br />   
#include <stdio.h>
int main()
{
    int nN;
    
    while (scanf("%d", &nN) == 1)
    {
        int nCnt = 1;
        int nTemp = 1;
        while (1)
        {
            if (nTemp % nN == 0)break;
            else nTemp = (nTemp * 10 + 1) % nN;
            ++nCnt;
        }
        printf("%d\n", nCnt);
    }
    
    return 0;
}
   poj 2262 浠g爜錛?br />
#include <stdio.h>
#include <string.h>
#include <math.h>

#define MAX (1000000 + 10)
bool bPrime[MAX];
void InitPrime()
{
    memset(bPrime, truesizeof(bPrime));
    bPrime[0] = bPrime[1] = false;
    for (int i = 2; i <= MAX; ++i)
    {
        if (bPrime[i])
        for (int j = 2 * i; j <= MAX; j += i)
        {
            bPrime[j] = false;
        }
    }
}

int main()
{
    int nN;
    
    InitPrime();
    while (scanf("%d", &nN), nN)
    {
        int i;
        for (i = 2; i < nN; ++i)
        {
            if (i % 2 && (nN - i) % 2 && bPrime[i] && bPrime[nN - i])
            {
                printf("%d = %d + %d\n", nN, i, nN - i);
                break;
            }
        }
        if (i == nN)
        {
            printf("Goldbach's conjecture is wrong.\n");
        }
    }
    
    return 0;
}


yx 2012-07-25 22:35 鍙戣〃璇勮
]]>
国产精品99久久免费观看| 一级做a爰片久久毛片人呢| 国内精品久久久久久久久电影网| 久久久久免费看成人影片| 免费久久人人爽人人爽av| 久久久久无码中| 久久免费视频一区| AAA级久久久精品无码区| 久久免费精品视频| 2020最新久久久视精品爱| 94久久国产乱子伦精品免费| 99久久国产综合精品成人影院| 欧美久久综合性欧美| 久久精品一区二区| 99久久精品免费国产大片| 国产99久久久久久免费看| 精品久久久久中文字幕一区| 天天做夜夜做久久做狠狠| 中文精品99久久国产| 天天躁日日躁狠狠久久| 国产午夜久久影院| 久久久久97国产精华液好用吗| 亚洲一区精品伊人久久伊人| 久久久老熟女一区二区三区| 91亚洲国产成人久久精品| 日韩中文久久| 久久精品国产亚洲AV无码娇色| 久久综合九色综合久99| 久久久国产精华液| 久久精品国产一区二区三区日韩| 国产毛片久久久久久国产毛片| 久久综合视频网| 99久久免费国产特黄| 久久天天躁狠狠躁夜夜av浪潮| 国产成人久久精品一区二区三区 | av无码久久久久久不卡网站| 99久久精品国产一区二区三区 | 国内精品伊人久久久久影院对白| 伊人久久精品影院| 99久久婷婷国产综合亚洲| 久久九色综合九色99伊人|