输入:输入一个十进制数
输出:若输入的数为质数,则输出YES,否则,输出NO
方案一:在判断一个数是否为质数时,我们只需要检查到这个数的平方根的数是否能整除它。因为如果一个数不是质数,那么它必定有一个因子小于或等于它的平方根。因此我们只需要检查到n的平方根的数是否能整除n,就可以判断n是否为质数。这样可以大大减少需要检查的数的数量,提高程序的效率。
#include <bits/stdc++.h>
using namespace std;
int isprime(int n)//定义一个判断质数的函数
{
if(n<=1)
return 0;//0,1都不是质数
for(int i=2;i*i<=n;i++)//直接从2开始找
{
if(n%i==0)
return 0;
}
return 1;
}
int main()
{
int n;
cin>>n;
if(isprime(n))//若isprime(n)的之不为0
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
return 0;
}
#include <bits/stdc++.h>//不使用函数的版本
using namespace std;
int main()
{
int n,i;
scanf("%d",&n);
if(n<=1)
{
printf("NO\n");
return 0;
}
for (i=2;i*i<=n;i++)
{
if(n%i==0)
{
printf("NO\n");
return 0;
}
}
printf("YES\n");
return 0;
}
方案二:使用了两个循环嵌套。外层循环从?2?到?n?枚举所有可能的因子,内层循环从?2?到当前因子值之前的数,检查是否存在能整除当前因子的数。如果找到了一个能整除当前因子的数,则跳出内层循环,继续枚举下一个因子。如果当前因子是?n?的因子,则将?isPrime?设置为?false,并跳出外层循环。在内层循环中,当枚举到当前因子值减?1?的时候,如果还没有找到能整除当前因子的数,则说明当前因子是素数,也就是?n?的因子。在这种情况下需要将?isPrime?设置为?false,并跳出外层循环。
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
bool isPrime = true;
if (n < 2)
{
isPrime = false;
}
else
{
for (int i = 2; i < n; i++)
{
for (int j = 2; j < i; j++)
{
if (i % j == 0)
{
break;
}
if (j == i - 1 && n % i == 0)
{
isPrime = false;
break;
}
}
if (!isPrime)
{
break;
}
}
}
if (isPrime)
{
cout << "YES" << endl;
} else
{
cout << "NO" << endl;
}
return 0;
}