POJ3641_Pseudoprime numbers【快速冪】【偽素數】

來源:互聯網
上載者:User

標籤:des   style   blog   io   os   ar   for   2014   div   

Pseudoprime numbersTime Limit: 1000MSMemory Limit: 65536KTotal Submissions: 6544Accepted: 2648Description


Fermat‘s theorem states that for any prime number p and for any integer a > 1, ap = a (mod p). That is, if we raise a to the pth power and divide by p, the remainder is a. Some (but not very many) non-prime values of p, known as base-a pseudoprimes, have this property for some a. (And some, known as Carmichael Numbers, are base-a pseudoprimes for all a.)


Given 2 < p ≤ 1000000000 and 1 < a < p, determine whether or not p is a base-a pseudoprime.


Input


Input contains several test cases followed by a line containing "0 0". Each test case consists of a line containing p and a.


Output


For each test case, output "yes" if p is a base-a pseudoprime; otherwise output "no".


Sample Input


3 2
10 3
341 2
341 3
1105 2
1105 3
0 0
Sample Output


no
no
yes
no
yes
yes
Source


Waterloo Local Contest, 2007.9.23

題目大意:費馬定理:a^p = a(mod p) (a為大於1的整數,p為素數),一些非素數p,同樣也符合上邊的

定理,這樣的p被稱作基於a的偽素數,給你p和a,判斷p是否是基於a的偽素數

思路:很簡單的快速冪取餘+素性判斷 

如果p為素數,則直接輸出no

如果p不為素數,則進行快速冪取餘判斷是否為偽素數,若是,輸出yes,不是,輸出no

#include<stdio.h>#include<math.h>__int64 QuickPow(__int64 a,__int64 p){    __int64 r = 1,base = a;    __int64 m = p;    while(p!=0)    {        if(p&1)            r = r * base % m;        base = base * base % m;        p >>= 1;    }    return r;}bool IsPrime(__int64 p){    for(__int64 i = 2; i <= sqrt(p) + 1; i++)    {        if(p % i == 0)            return false;    }    return true;}int main(){    __int64 a,p;    while(~scanf("%I64d %I64d",&p,&a) && (p!=0 || a!=0))    {        if(IsPrime(p))            printf("no\n");        else        {            if(QuickPow(a,p) == a)                printf("yes\n");            else                printf("no\n");        }    }    return 0;}



POJ3641_Pseudoprime numbers【快速冪】【偽素數】

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.