标签:prime 整数 log ati number static ret bin solution
对于给定的一个数n,如何判断其是否是素数呢?
最简单最直观的方法是试除法(下面的算法1、2、3),还有一种方法是Rabin-Miller算法。
public boolean isPrimeNumber(int n){ for(int i = 2;i < n; i++){ if(n%i==0) return false; } return true; }
public boolean isPrimeNumber(int n){ int target = (int)Math.sqrt(n); for(int i= 2;i<target;i++) if(target%i==0) return false; return true; }
class Solution{ int[] Prime = new int[Integer.MAX]; Prime[0] = 2; count = 1; //与其说是检测是否为素数,本程序其实是从头开始建立素数数组,无法做到针对单一数字的离散判断,而且对于大数而言,空间代价较大 public static boolean isPrime(int n){ int target = (int)Math.sqrt(n); for(int i = 0;i<count;i++) if(target%Prime[i]==0) return false; return true; } }
//n是待测数字,s设定Rabin-Miller测试次数 public boolean isPrime(int n, int s){ for(int i=0;i<s;i++){ int a = rand()*(n-2)/RAND_MAX+1; //只要有一次没有通过Rabin-Miller测试,那么 n 就不是素数 if(RabinMiller(a,n)) return false; } return true; } //一次Rabin-Miller测试实现 public boolean RabinMiller(int a,int n){ long i,d=1,x; for(i = (int)Math.ceil(Math.log((double)n-1)/Math.log(2.0))-1; i>=0; i--){ x = d; d = (d*d)%n; if( 1==d && x!=1 && x!=n-1) return true; if((n-1)&(1<0)) d = (d*a)%n; } return d!=1; }
标签:prime 整数 log ati number static ret bin solution
原文地址:http://www.cnblogs.com/zhengmengen/p/7860195.html