给定正整数,请检查数字是否为质数。质数是大于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)
优化学校方法
我们可以进行以下优化:
- 除了可以检查直到√n之外,我们还可以检查直到√n,因为较大的n因子必须是已经检查过的较小的因子的倍数。
- 通过观察所有素数都为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的所有数字。