Pseudoprime numbers(POJ-3641)(快速幂)

快速幂+素数判断

p必须不是素数。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
using namespace std;
typedef long long ll;
ll a,p;
ll mod_pow(ll x,ll n,ll mod) {
    ll res = 1;
    while(n>0) {
        if(n & 1) res = (res * x) % mod;
        x = (x * x) % mod;
        n >>= 1;
    }
    return res;
}
bool is_prime(int a) {
    for(int i=2;i*i<=a;i++)
        if(a%i==0) return false;
    return true;
}
int main() {
    while(~scanf("%lld%lld",&p,&a)) {
        if(a==0&&p==0) return 0;
        long long  v = mod_pow(a,p,p);
        if(v==a%p&&!is_prime(p)) printf("yes\n");
        else printf("no\n");
    }
    return 0;
}
时间: 2024-10-05 19:03:19

Pseudoprime numbers(POJ-3641)(快速幂)的相关文章

Pseudoprime numbers POJ 3641(快速幂)

原题 题目链接 题目分析 依题意要先检测p是否为素数,这个可以用埃筛筛出1-sqrt(1e9)的素数,然后判定一下p是否能被这些数整除,不能的话就是素数,否则则为合数.至于a的p次方直接套个快速幂就行了. 代码 1 #include <cstdio> 2 #include <cstdlib> 3 #include <iostream> 4 #include <algorithm> 5 #include <utility> 6 #include &

Pseudoprime numbers POJ - 3641

快速幂入门... wa一次是因为没认识到p不能为质数 /*   author:hdsdogge   begin:   end:   cost:   */ #include<iostream> #include<string> #include<queue> #include<map> #include<stack> #include<algorithm> #include<cmath> #include<cstdio

Raising Modulo Numbers POJ 1995(快速幂模板)

原题 题目链接 题目分析 快速幂模板题,依题意套个求模快速幂,然后答案边加边模即可. 代码 1 #include <cstdio> 2 #include <cstdlib> 3 #include <iostream> 4 #include <algorithm> 5 #include <utility> 6 #include <ctime> 7 #include <cmath> 8 #include <cstring

UVA 11582 Colossal Fibonacci Numbers!(打表+快速幂)

Colossal Fibonacci Numbers! The i'th Fibonacci number f (i) is recursively defined in the following way: f (0) = 0 and f (1) = 1 f (i+2) = f (i+1) + f (i)  for every i ≥ 0 Your task is to compute some values of this sequence. Input begins with an int

Raising Modulo Numbers(POJ 1995 快速幂)

Raising Modulo Numbers Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 5934   Accepted: 3461 Description People are different. Some secretly read magazines full of interesting girls' pictures, others create an A-bomb in their cellar, oth

Raising Modulo Numbers 取模+快速幂

Raising Modulo Numbers 题目地址:http://poj.org/problem?id=1995 Description People are different. Some secretly read magazines full of interesting girls' pictures, others create an A-bomb in their cellar, others like using Windows, and some like difficult

POJ 1845-Sumdiv(快速幂取模+整数唯一分解定理+约数和公式+同余模公式)

Sumdiv Time Limit:1000MS     Memory Limit:30000KB     64bit IO Format:%I64d & %I64u Submit Status Practice POJ 1845 Appoint description:  System Crawler  (2015-05-27) Description Consider two natural numbers A and B. Let S be the sum of all natural d

POJ1995 Raising Modulo Numbers【整数快速幂】

题目链接: http://poj.org/problem?id=1995 题目大意: N个人在一起玩游戏,每个人默写两个数字Ai.Bi,在同一个时间公开给其他玩家看.游戏的目的是 为了看谁能够在最快的时间求出所有的Ai^Bi的和对M取模的值.那么问题来了:你能够快速算出 (A1B1+A2B2+ ... +AHBH)mod M 的值吗? 思路: 用二分整数快速幂算法计算出每一个Ai^Bi,然后依次相加取模. AC代码: #include<iostream> #include<algorit

poj 1995 快速幂(裸)

Raising Modulo Numbers Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 9218   Accepted: 5611 Description People are different. Some secretly read magazines full of interesting girls' pictures, others create an A-bomb in their cellar, oth

倍增法&amp;快速幂思想在解题中的应用

1.(a^b)mod p POJ 1995 快速幂板子题 (附带板子) typedef long long ll; ll mod; ll qp(ll a,ll b) { ll ret=1,base=a; while(b) { if(b&1) ret=(ret*base)%mod; base=(base*base)%mod; b=b>>1; } return ret; } 2.求(a*b)mod p; (a,b为longlong 64位整数乘法) 设b的二进制表示为b=Ck*2^k+Ck