首页 > 其他 > 详细

hdoj1905解题报告

时间:2019-04-10 19:25:10      阅读:142      评论:0      收藏:0      [点我收藏+]
技术分享图片

技术分享图片

题意:输入两个数p,a;如果a的p次方对p取余等于a,并且p不是素数,则输出“yes”,否则输出“no”.

这里用到快速幂求余技巧

#include <iostream>
#include <stdio.h>
using namespace std;
bool isprime(long long n){
    for (long long i = 2; i*i <= n; i++){
        if (n%i == 0)
            return false;
    }
    return true;
}
long long qmod(long long a, long long r, long long m){
    long long res = 1;
    while (r){
        if (r & 1)
            res = res*a%m;
        a = a*a%m;
        r >>= 1;
    }
    return res;
}
int main(){
    long long p, a;
    while (scanf("%I64d%I64d", &p, &a) && p&&a){
        if (!isprime(p) && qmod(a, p, p) == a)
            printf("yes\n");
        else
            printf("no\n");
    }
    return 0;
}

hdoj1905解题报告

原文:https://www.cnblogs.com/jianqiao123/p/10685454.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!