定义法测试素数

写在前面:

  记录了个人的学习过程,同时方便复习

  • 定义法测试素数

  由于素数的因数只有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 }

猜你喜欢

转载自www.cnblogs.com/Antigonae/p/10253274.html