试除法判断质数
6 分钟能读完
质数
什么是质数:存在一个数
判定质数——试除法
从定义出发,枚举每个
如果
题目描述
给定
输入格式
第一行包含整数
接下来
输出格式
共 Yes,否则输出 No。
数据范围
样例
输入样例:
2
2
6
输出样例:
Yes
No
代码
暴力版
暴力做法,时间复杂是
C++
#include <iostream>
using namespace std;
bool is_prime(int n)
{
if ( n < 2 ) return false;
for ( int i = 2; i < n; i ++ )
if ( n % i == 0 ) return false;
return true;
}
int main()
{
int T;
cin >> T;
while ( T-- )
{
int n;
cin >> n;
cout << (is_prime(n) ? "Yes" : "No") << endl;
}
return 0;
}
Java
import java.util.*;
public class Main
{
static Scanner in = new Scanner(System.in);
public static void main(String args[])
{
int T = in.nextInt();
while ( T-- > 0 )
{
int n = in.nextInt();
System.out.printf("%s\n", is_prime(n) ? "Yes" : "No");
}
}
public static boolean is_prime(int n)
{
if ( n < 2 ) return false;
for ( int i = 2; i < n; i ++ )
if ( n % i == 0 ) return false;
return true;
}
}
优化版
优化后,时间复杂是
for ( int i = 2; i <= n / i; i ++ ),这里可能有下面几种写法
for ( int i = 2; i <= sqrt(n); i ++ )。不推荐,每次循环后,都会执行判断条件,所以每次都会调用sqrt()函数,比较耗时间。
for ( int i = 2; i * i <= n; i ++ )。存在数据溢出的风险。
C++
#include <iostream>
using namespace std;
bool is_prime(int n)
{
if ( n < 2 ) return false;
for ( int i = 2; i <= n / i; i ++ )
if ( n % i == 0 ) return false;
return true;
}
int main()
{
int T;
cin >> T;
while ( T-- )
{
int n;
cin >> n;
cout << (is_prime(n) ? "Yes" : "No") << endl;
}
return 0;
}
Java
import java.util.*;
public class Main
{
static Scanner in = new Scanner(System.in);
public static void main(String args[])
{
int T = in.nextInt();
while ( T-- > 0 )
{
int n = in.nextInt();
System.out.printf("%s\n", is_prime(n) ? "Yes" : "No");
}
}
public static boolean is_prime(int n)
{
if ( n < 2 ) return false;
for ( int i = 2; i <= n / i; i ++ )
if ( n % i == 0 ) return false;
return true;
}
}
这篇在全部 101 篇里的位置: