愿各位程序员都能记住,输出第一条hello world时候的心情。坚持下去,你的每一条代码都在默默的改变世界,加油!加油!加油! “这些年我一直提醒自己一件事情,千万不要自己感动自己。大部分人看似的努力,不过是愚蠢导致的。 什么熬夜看书到天亮,连续几天只睡几小时,多久没放假了,如果这些东西也值得夸耀,那么富士康流水线上任何一个人都比你努力多了。 人难免天生有自怜的情绪,唯有时刻保持清醒,才能看清真正的价值在哪里。

欧拉线筛

素数个数

题目传送门

 

code:

#include<bits/stdc++.h>
using namespace std;
int n;  
bool vis[100000000];//判断是否为素数 
int Isprime[5800000];//记录存储素数
int cnt=0;//cnt代表素数的个数
void prime(int x)
{  
    if(x==1)return ;
    for(int i=2;i<=x;i++){
        if(!vis[i]){//vis表示0为素数,1为合数
            Isprime[++cnt]=i;
        }
        for(int j=1;j<=cnt&&i*Isprime[j]<=x;j++){
            vis[Isprime[j]*i]=true;
            //此时  Isprime[j]为依次最小素数,Isprime[j] 一定是 i 的最小素数
            if(i%Isprime[j]==0)break;
            //欧拉筛法的核心语句:判断去重
            //因为 Isprime[j]的倍数一定被标记过且为合数,
            //所以当 i 为其倍数时直接break掉 ; 减少重复运算
            
        }
    }
    return ;
}
int main(){
    scanf("%d",&n);
    prime(n);
    printf("%d\n",cnt);
}

完美AC,注意数据范围,防止RE

 

判断素数

题目传送门

code

 

 1 #include<bits/stdc++.h>
 2 using namespace std;    
 3 int a,b,ans=0;
 4 /*int dif(int n)
 5 {
 6     int temp=0,nn=0;
 7     while(n!=0)
 8     {
 9         temp=temp*10+n%10;
10         n=n/10;
11     }
12     return temp;
13 }*/
14 bool prim(int s)
15 {
16     if(s<=1)
17     return false;
18     for(int i=2;i*i<=s;i++)
19         if(s%i==0)return false;
20         //else return true;
21     return true;
22 }
23 int main()
24 {
25 
26     cin>>a;
27     if(prim(a))
28     cout<<"YES"<<endl;
29     else
30     cout<<"NO"<<endl;
31 }

 

posted @ 2019-07-28 11:48  max_lemon  阅读(502)  评论(2编辑  收藏  举报
Live2D
别人恋爱不成功,你连暗恋都不成功! 你写不出代码的原因只有一个,那就是你没有彻底理解这个算法的思想!!-----沃茨·基硕德