poj 3641 快速幂

来源:互联网 发布:八爪鱼头部按摩器 知乎 编辑:程序博客网 时间:2024/06/08 07:36

输入m,n;

首先 若m为素数直接输出no;

若为素数,则判断n的m次方mod m=n mod m?;

若相等输出yes;

否则输出no

用取余+快速幂;

素数判断就不用说了

记得 long long

#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<iostream>using namespace std;long long pd(long long x){long long a=floor(sqrt(x));for(long long i=2;i<=a;i++)if(x%i==0)return 0;return 1;}long long f(long long m,long long n){long long m1=m,n1=n;long long s=1;while(m){if(m%2)s*=n;n*=n;m/=2;s%=m1;n%=m1;}if(s%m1==n1%m1)return 1;else return 0;}int main(){long long i,j,k,m,n;while(scanf("%lld%lld",&m,&n)){if(m==0&&n==0)break;if(pd(m))printf("no\n");else if(f(m,n))printf("yes\n");else printf("no\n");}return 0;}


1 0
原创粉丝点击