素数判定随机算法java实现

来源:互联网 发布:加速度测量软件 编辑:程序博客网 时间:2024/05/23 01:57

使用随机算法可以在判断素数时大大的提高计算效率

一般的常用方法:

public static int prime(int n){for(int i=2 ; i<Math.sqrt(n) ; i++){if(n%i==0){return 0;}}return 1;}

Fermat小定理实现的随机算法:

public static int prime0(int n){for(int i=0 ; i<2 ; i++){//a为1到n-1之间的任意的整数int a = (int) (Math.random()*(n-1)+1);System.out.println(a);//根据费马定理,下面计算a的n-1次幂的值int z=a, m=n-1, y=1;while(m>0){while(m%2==0){z = (z*z)%n;m /= 2;}m--;y = (y*z)%n;}if(y != 1){return 0;}}return 1;}
Miller-Rabin的素数测试算法:

public static int prime1(int n){for(int i=0 ; i<2 ; i++){//a为1到n-1之间的任意的整数int a = (int) (Math.random()*(n-1)+1);System.out.println(a);//根据费马定理,下面计算a的n-1次幂的值int z=a, m=n-1, y=1;while(m>0){while(m%2==0){int x =z;z = (z*z)%n;m /= 2;if(z==1 && x!=1 &&x!=n-1){return 0;}}m--;y = (y*z)%n;}if(y != 1){return 0;}}return 1;}

三种方法测试程序:

第一种方法:

public class Test {public static void main(String[] args) {int num = 561;if(Prime.prime(num)==0){System.out.println(num+"不是素数!");}else{System.out.println(num+"是素数!");}}}

输出结果:

561是素数

第二种方法:

public class Test {public static void main(String[] args) {int num = 561;if(Prime.prime0(num)==0){System.out.println(num+"不是素数!");}else{System.out.println(num+"是素数!");}}}

输出结果:

343437561是素数!

第三种方法:

public class Test {public static void main(String[] args) {int num = 561;if(Prime.prime1(num)==0){System.out.println(num+"不是素数!");}else{System.out.println(num+"是素数!");}}}
输出结果:

147561不是素数!

0 0
原创粉丝点击