📜  原始性测试|第一组(介绍和学校方法)

📅  最后修改于: 2021-04-27 22:50:30             🧑  作者: Mango

给定正整数,请检查数字是否为质数。质数是大于1的自然数,除1及其本身外,没有其他除数。前几个素数的示例是{2、3、5
例子 :

Input:  n = 11
Output: true

Input:  n = 15
Output: false

Input:  n = 1
Output: false

学校方法
一个简单的解决方案是遍历2到n-1之间的所有数字,并检查每个数字是否除以n。如果找到任何可除的数,则返回false。
下面是此方法的实现。

C++
// A school method based C++ program to check if a
// number is prime
#include 
using namespace std;
 
bool isPrime(int n)
{
    // Corner case
    if (n <= 1)  return false;
 
    // Check from 2 to n-1
    for (int i=2; i


Java
// A school method based JAVA program
// to check if a number is prime
class GFG {
     
    static boolean isPrime(int n)
    {
        // Corner case
        if (n <= 1) return false;
     
        // Check from 2 to n-1
        for (int i = 2; i < n; i++)
            if (n % i == 0)
                return false;
     
        return true;
    }
     
    // Driver Program
    public static void main(String args[])
    {
        if(isPrime(11))
            System.out.println(" true");
        else
            System.out.println(" false");
        if(isPrime(15))
            System.out.println(" true");
        else
            System.out.println(" false");
         
    }
}
 
// This code is contributed
// by Nikita Tiwari.


Python3
# A school method based Python3
# program to check if a number
# is prime
 
def isPrime(n):
 
    # Corner case
    if n <= 1:
        return False
 
    # Check from 2 to n-1
    for i in range(2, n):
        if n % i == 0:
            return False;
 
    return True
 
# Driver Program to test above function
print("true") if isPrime(11) else print("false")
print("true") if isPrime(14) else print("false")
 
# This code is contributed by Smitha Dinesh Semwal


C#
// A optimized school method based C#
// program to check if a number is prime
using System;
 
namespace prime
{
    public class GFG
    {    
        public static bool isprime(int n)
        {
            // Corner cases
            if (n <= 1) return false;
             
            for (int i = 2; i < n; i++)
                if (n % i == 0)
                return false;
  
            return true;
        }
         
        // Driver program
        public static void Main()
        {
            if (isprime(11)) Console.WriteLine("true");
            else Console.WriteLine("false");
             
            if (isprime(15)) Console.WriteLine("true");
            else Console.WriteLine("false");
        }
    }
}
 
// This code is contributed by Sam007


PHP


Javascript


输出 :

true
false

该解决方案的时间复杂度为O(n)
优化学校方法
我们可以进行以下优化:

  1. 除了可以检查直到√n之外,我们还可以检查直到√n,因为较大的n因子必须是已经检查过的较小的因子的倍数。
  2. 通过观察所有素数都为6k±1的形式(2和3除外)可以进一步改进该算法。这是因为对于某些整数k以及对于i =-,所有整数都可以表示为(6k + i)。 1、0、1、2、3或4; 2除(6k + 0),(6k + 2),(6k + 4);和3除法(6k + 3)。因此,一种更有效的方法是测试n是否可被2或3整除,然后检查形式为6k±1的所有数字。