测试一个大数是否是素数
2017-08-20 20:49
211 查看
如果P是素数,且0 < A < P,那么AP-1≡1(mod P)。
利用这个定理判定N是否为素数,随机生成一个A,1 < A < N-1,如果得到余数不是1,则N不是素数。如果余数是1,则N很可能是素数。如果要降低错误率,需要添加额外的测试。还可以增加判定的次数。
如果P是素数且0< X < P,那么X2≡1(mod P)仅有的两个解为X=1,P-1。
witness算法运行一次有75%的可能是正确的。
如果没有额外的测试,很容易将561判定为素数。添加额外的测试或者增加判定次数为10,则会出现正确的结果
利用这个定理判定N是否为素数,随机生成一个A,1 < A < N-1,如果得到余数不是1,则N不是素数。如果余数是1,则N很可能是素数。如果要降低错误率,需要添加额外的测试。还可以增加判定的次数。
如果P是素数且0< X < P,那么X2≡1(mod P)仅有的两个解为X=1,P-1。
witness算法运行一次有75%的可能是正确的。
int witness(const int & a,const int & i,const int & n) { if(i==0) return 1; int x=witness(a,i/2,n); if(x==0) return 0; int y=(x*x)%n; if(y==1&&x!=1&&x!=n-1) return 0; if(i%2!=0) y=(a*y)%n; return y; } int main() { Random rand(1); int n=561; int trials=5; for(int count=0;count<trials;++count) { //生成[2,n-1)间的随机整数 if(witness(rand.randomInt(2, n-1), n-1, n)!=1) return 0; } return 1; }
如果没有额外的测试,很容易将561判定为素数。添加额外的测试或者增加判定次数为10,则会出现正确的结果
相关文章推荐
- 编制一个返回值为bool型的函数isPrimer(),用于判断参数是否为素数(是素数返回true,否则false),自编main函数用于测试
- 调用函数判断一个数是否为素数(传统+优化)
- php判断一个数是否为质数(素数)
- 输入一个正整数,判断其是否为素数
- 判断一个数和这个数逆置过来是否为素数
- 如何判断是否需要对一个软件进行性能测试
- 输入一个数判断是否为素数
- 判断一个正整数是否为素数
- 分享:怎么去测试一个 app 是否存在安全问题?
- 算法总结:判断一个数是否为素数
- 检测随机数是否为一个素数的C/C++实现
- 判断一个数是否为素数Java实现
- 函数_习题:编写函数判定一个数是否为素数
- 判断一个数是否为素数
- 判断一个数是否是素数
- C语言如何判断一个数是否为素数
- 如何测试一个对象是否是类字符串
- 【Java编程】调用方法判断一个数是否是素数
- 做一个简单的PHP测试页来测试是否正常
- 编写程序,自定义一函数,用来判断一个整数是否为素数,主函数输入一个数,输出是否为素数