定义法测试素数
写在前面:
记录了个人的学习过程,同时方便复习
-
定义法测试素数
由于素数的因数只有1和它本身
将待测试的正整数n模上2,3,4,……,√n
如果其中出现模的结果为0,那么说明模数是n的因数,而模数不为1或n,则n不是素数
如果到最后都没有出现模的结果是0这种情况,那么说明n一定是素数
定义法判断素数准确无误,但是无疑时间复杂度太高
一般地,判断素数还是使用[◹]Miller-Rabin算法
但是有些情况下,定义法还是相当有用的测试方法
代码如下:
C++:
1 #include<bits/stdc++.h> 2 3 using namespace std; 4 5 int n; 6 7 bool isPrime(int x){ 8 for(int i=2;i<=sqrt(x);++i) 9 if(!(x%i)) return 0; 10 return 1; 11 } 12 13 int main(int argc,char *argv[],char *enc[]) 14 { 15 scanf("%d",&n); 16 17 if(isPrime(n)) printf("Prime!\n"); 18 else printf("Not a prime\n"); 19 20 return 0; 21 }
Java:
1 import java.util.Scanner; 2 import java.lang.Math; 3 4 class Pony{ 5 6 static int n; 7 8 static boolean isPrime(int x){ 9 for(int i=2;i<=(int)Math.sqrt((double)x);++i) 10 if(x%i==0) return false; 11 return true; 12 } 13 14 public static void main(String[] args) throws Exception 15 { 16 Scanner cin=new Scanner(System.in); 17 18 n=cin.nextInt(); 19 20 if(isPrime(n)) System.out.printf("Prime!\n"); 21 else System.out.printf("Not a prime\n"); 22 } 23 }