先赞后看,养成习惯。
#include<iostream>
using namespace std;
int main()
{
int x;
cin >> x;
return 0;
}
首先,定义一个变量存数据。
我们知道素数(质数)是指一个除了1和它本身,其余都不能整除的数。
所以用for循环判断。
for(int i = 2;i<x;i++)
{
if(x%i==0)
{
cout << x << "不是素数"<<endl;
return 0;
}
}
cout << x << "是素数"<<endl;
从2到x-1可以减少判断是不是不等于1和本身。
发现有能被整除的数,输出直接return结束。
这行代码的最坏时间复杂度是O(n-1)有可能超时。
----------方法2----------
我们知道就拿9举例,假设1~3都不能被整除(除以9),那么4肯定也不能整除(除以9)
所以只要算到根号9就行了。
for(int i = 2;i*i<=x;i++)
{
if(x%i==0)
{
cout << x <<"不是素数"<<endl;
return 0;
}
}
时间复杂度O(√n)
但i可能会超int的范围,所以可以用sqrt(数字)。
先导入数学包
#include<cmath>
再写for循环
for(int i = 2;i<=sqrt(x);i++)
{
if(x%i==0)
{
cout << x <<"不是素数"<<endl;
return 0;
}
}
注意:sqrt()中只能加数字(int,long等)不能加下标和地址
时间复杂度O(√n)
因为是int所以直接向下取整。
整体代码:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int x;
cin >> x;
for(int i = 2;i<=sqrt(x);i++)
{
if(x%i==0)
{
cout << x << "不是素数"<<endl;
return 0;
}
}
cout << x << "是素数"<<endl;
return 0;
}
你学会了吗?
拜了个拜。