题意:

给你两个数,p和a;满足两个条件:
1.p不是素数;
2.apa^{p}ap %p==a;
满足则输出yes,反之输出no。

题目:

Fermat’s theorem states that for any prime number p and for any integer a > 1, apa^{p}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

分析:

这道题一旦题意出来了,其他就是常规操作,第一个条件p为非素数很容易看出,但第二个条件,恕我眼拙,题目给了一个【a > 1, apa^{p}ap = a (mod p). 】的条件,我很容易就想到了费马小定理的xp−1≡1(modp)x^{p-1}\equiv 1(mod p)xp−1≡1(modp),然后就掉进坑里爬都爬不起来,看到博客上的题意,心情很崩溃。

AC代码:

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
typedef long long ll;
ll p,a;
bool prime(ll x){int k=0;for(int i=2;i*i<=x;i++)if(x%i==0)k++;if(k==0) return true;return false;
}
ll mod(ll a,ll p,ll mod){ll ans=1;a%=mod;while(p){if(p&1) ans=a*ans%mod;p>>=1;a=a*a%mod;}return ans;
}
int main(){while(~scanf("%lld%lld",&p,&a)){if(!p&&!a)break;if(prime(p)){printf("no\n");continue;}if(mod(a,p,p)==a) printf("yes\n");else printf("no\n");}return 0;
}

Pseudoprime numbers POJ - 3641(快速幂+判素数)相关推荐

  1. POJ 3613 快速幂+Floyd变形(求限制k条路径的最短路)

    题意:       给你一个无向图,然后给了一个起点s和终点e,然后问从s到e的最短路是多少,中途有一个限制,那就是必须走k条边,路径可以反复走. 思路:       感觉很赞的一个题目,据说证明是什 ...

  2. POJ3641 UVA11287 HDU1905 Pseudoprime numbers【素数判定+快速模幂】

    问题链接:POJ3641 UVA11287 HDU1905 Pseudoprime numbers. 问题简述:参见上述链接. 问题分析: 这个问题是验证伪素数问题.p是伪素数的条件是,p不是素数并且 ...

  3. c语言的幂乘积表达式,POJ 1845 Sumdiv [素数分解 快速幂取模 二分求和等比数列]

    大致题意: 求A^B的所有约数(即因子)之和,并对其取模 9901再输出. 解题基础: 1) 整数的唯一分解定理: 任意正整数都有且只有一种方式写出其素因子的乘积表达式. ,其中 为素数 2) 约数和 ...

  4. poj 1995 Raising Modulo Numbers 二分快速幂

    题意:给定n对Ai,Bi,求所有Ai的Bi次方之和对M取模的结果: 思路:二分法求快速幂: #include<cstdio> #include<cstring> #includ ...

  5. Poj1995--Raising Modulo Numbers(快速幂)

    题目: http://poj.org/problem?id=1995 Input The input consists of Z assignments. The number of them is ...

  6. I-Matrix Power Series POJ - 3233 矩阵快速幂+分治

    I-Matrix Power Series POJ - 3233 矩阵快速幂+分治 Problem Description Given a n × n matrix A and a positive ...

  7. H - Fibonacci POJ - 3070 (矩阵快速幂)

    H - Fibonacci POJ - 3070 (矩阵快速幂) Description In the Fibonacci integer sequence, F0 = 0, F1 = 1, and ...

  8. POJ 2778 DNA Sequence [AC自动机 + 矩阵快速幂]

    http://poj.org/problem?id=2778 题意:给一些只由ACGT组成的模式串,问有多少种长度为n且不含有给出的模式串的DNA序列. 自动机的状态转换可以看成一个有向图(有重边的) ...

  9. POJ 3070 Fibonacci(矩阵快速幂入门、模板)

    ? 题目链接:http://poj.org/problem?id=3070 ?   这题就是让求斐波那契数列的第n项,但是题目中n很大,所以打表和直接求都会TLE,对于这个题我们可以用矩阵快速幂,下面 ...

最新文章

  1. php。defined,PHP defined()函数的使用图文详解
  2. github添加图片
  3. 百度首页html简单代码_百度站长平台为什么要验证网站及验证方法
  4. 前端获取后端传来的session_java后台如何获取,前台传来的表单数据
  5. css中float详解,CSS浮动属性Float详解?史上最全Float详解
  6. codeforces 909C. Python Indentation
  7. 计算机一级上机考试试题题库,2016年计算机一级上机考试题库
  8. angular2或4部署到tomcat中,让他跑起来
  9. mysql error report,ECSHOP网店系统提示MYSQL SERVER ERROR REPORT的解决方法
  10. hbase建索引java api_hbase创建索引
  11. javaScript常见的五种数组去重(转载)
  12. 离散数学:主范式(主析取范式、主合取范式)
  13. 你的电脑或移动设备不支持Miracast
  14. 使用bash解析xml
  15. Android高级UI系列教程(二)
  16. 物联网卡企业的选择应该怎么避雷
  17. 干货|FOF资产配置方案全解析
  18. 实名认证需谨慎,避免陷入隐私泄露风险
  19. CSS3颜色值RGBA与渐变色
  20. openwrt重启后,修复dns

热门文章

  1. Android之screenOrientation属性
  2. 围棋经典棋谱_秀秀老师:茶艺师也要学好围棋
  3. sql count用法_SQL学习笔记3:count(*)函数
  4. 分享一个理工男必学的撩妹姿势
  5. 据说这是史上最牛逼的可视化神器
  6. 今年不容易,要懂得爱护自己
  7. 通过简单的Word Count讲解MapReduce原理以及Java实现
  8. 指定的文件不是虚拟磁盘 没有快照_vmware workstaiton 15 虚拟机克隆(4)
  9. yum php fpm5.6,CentOS 7 yum 安装php5.6
  10. 11尺寸长宽 iphone_LED显示屏的尺寸规格计算方法