【POJ】-3641-Pseudoprime numbers(快速幂,大数素数判定)
来源:互联网 发布:java reentrantlock 编辑:程序博客网 时间:2024/05/16 17:31
Description
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 210 3341 2341 31105 21105 30 0
Sample Output
nonoyesnoyesyes
题意:费马定理:任意素数p和任意整数a(a>1)有如下性质:a的p次方除以p的余数等于a。
有一些同样具有这个性质的非素数p被称为基数a的伪素数。
现在给定两个数p和a,问p是否是a的伪素数。是的话输出“yes”,反之输出“no”
就是说p如果不是素数判断:(a^p)%p==a,如果成立就是yes。
题解:1,首先判断p是不是素数。p范围很大,不可以打表。
2,p是素数输出no;不是进行判断。
#include<cstdio>#include<cmath>__int64 dis(__int64 n,__int64 m)__int64 ans=1;__int64 t=m;//临时变量t存放m,因为下面m会变 while(m){if(m&1)ans=(ans*n)%t;n=(n*n)%t;m>>=1;}return ans;} int main(){__int64 p,a;while(~scanf("%I64d %I64d",&p,&a)&&p&&a){int k=sqrt(p);for(int i=2;i<=k;i++)//判断p是不是素数,从2到更号p {if(p%i==0){k=0;//可以整出一个i,不是素数,标记k=0,退出 break;}}if(!k)//p不是素数,进行运算 {__int64 z=dis(a,p);if(z==a)printf("yes\n");elseprintf("no\n");}elseprintf("no\n");}return 0;}
- 【POJ】-3641-Pseudoprime numbers(快速幂,大数素数判定)
- poj 3641 Pseudoprime numbers 快速幂+素数判定 模板题
- POJ - 3641 Pseudoprime numbers <快速幂加素数判定>
- 【hdu】 Pseudoprime numbers 伪素数(快速幂+判定素数)
- POJ 3641 Pseudoprime numbers(快速幂+素数)
- POJ 3641 Pseudoprime numbers【素数+快速幂】
- Pseudoprime numbers poj3641(快速幂+素数判定)
- POJ 3641 Pseudoprime numbers (伪素数_快速幂)
- POJ 3641 Pseudoprime numbers(快速幂,素数)
- POJ 3641 - Pseudoprime numbers(快速幂)
- Pseudoprime numbers(POJ-3641)(快速幂)
- POJ 3641 Pseudoprime numbers (快速幂)
- POJ:3641 Pseudoprime numbers(快速幂)
- POJ 3641 Pseudoprime numbers (快速幂)
- POJ-3641 Pseudoprime numbers(快速幂)
- POJ3641 UVA11287 HDU1905 Pseudoprime numbers【素数判定+快速模幂】
- POJ Pseudoprime numbers (判断素数+快速幂取模)
- poj 3641 Pseudoprime numbers 【快速幂】
- div上下循环移动
- 怎样在GridView底部添加按钮
- java的内部类
- mysql之将字段改为unique
- Java基础之进制
- 【POJ】-3641-Pseudoprime numbers(快速幂,大数素数判定)
- 2进制转10进制 模板实现
- HDU 2087 剪花布条简单KMP
- SAP-MM-代码大全
- php 常用功能之导入导出-zend 框架下导出excel
- 省市区联动
- ailed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test (default-test)
- 转自http://apmserv.zyan.cc/
- Android 滑动效果入门篇—— ViewFlipper