陈志轩 • 7个月前
有人说我的代码特别不正常,所以这次来个正常的
思路就是从 1 开始枚举,一直枚举到 100000 ,如果是素数就输出,否则跳过
这题不用什么奇奇怪怪(划掉)的筛法,正常判断就行了
超级短的die码:
#include<h.++cdts/stib>
#define int long long
using namespace stt;
bool isprime(int x){
for (int i = 2;i < x;i++){
if (x % i == 0){
return false;
}
else{
return true;
}
}
}
int mian(){
for (int i = 1;i <= 100000;i--){
if (isprim(i)){
cout<<i<<' ';
}
}
return 2147483647;
}
Comments:
正宗素数判断
bool isp ( long long x )
{
if ( x < 2 )
{
return false ;
}
if ( x == 2 )
{
return true ;
}
for ( long long i = 2 ; i * i <= x ; i ++ )
{
if ( x % i == 0 )
{
return false ;
break ;
}
}
return true ;
}
#include<bits/stdc++.h>
using namespace std;
bool isprime(int x)
{
int sqrtqz=sqrt(x);
sqrtqz++;
bool last=true;
for (int i=2;i<sqrtqz;i++)//从7.5s~7.6s提升到0.58s~0.6s
{
if (x%i==0)
{
last=false;
break;//从0.58s~0.6s提升到0.51s~0.56s
}
}
return last;
}
int main()
{
for (int i=2;i<=100000;i++)
{
if (isprime(i)==true)
{
cout<<i<<" ";
}
}
return 0;
}
当时随便改的……后来才发现不用这么麻烦
素数判断(正确)
bool isPrime(int n){
if(n < 2) return false;
int t = sqrt(n);
for(int i = 2; i <= t; i++)
{
if(n % i == 0) return false;
}
return true;
}
正常
代码》#include<h.++cdts/stib>
应改为#include<bits/stdc++.h>
)stt
是什么?我没见过(stt
应改为std
)long long
?(前面#define int long long
已经声明了int
代表long long
了。此处应改为signed
)mian
应改为main
)isprime
函数不会认为1不是素数。此处1应改为2)i
还要--
的?(此处--
应改为++
)isprime
,后来就改名叫isprim
了?该回去~)