7 solutions

  • 1
    @ 2025-11-3 17:00:11
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e8+10;
    bool st[N],idx;
    vector<int> p;
    /*
    标记过程:
    如果i不是怕p[j]的倍数,那么p[j]是小于等于i的,相等于i*p[j]是被p[j]标记的,p[j]
    是i*p[j]的最小质因数
    如果i是p[j]的倍数,那么p[j]是i的最小质因子,同时也是i*p[j]的最小质因子
    综上:每个数一定是被最小的质因子标记的
    */
    void get(int n)
    {
       for(int i=2;i<=n;i++)   //枚举所有的数
       {
          if(!st[i])
          {
             p.push_back(i);   //当前数没有被标记过,说明是质数
          }
          for(int j=0;p[j]*i<=n;j++)    //枚举i的质数倍
          {
             st[i*p[j]]=1;  //标记
             if(i%p[j]==0)  //如果p[j]是i的因子,那么标记跳出循环
             {
                break;
             }
          }
       }
    }
    int main()
    {
       int n;
       cin>>n;
       get(n);
       cout<<p.size();
       return 0;
    }
  • -1
    @ 2024-12-21 16:28:00
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e8+10;
    bool st[N],idx;
    vector<int> p;
    /*
    1.标记的过程
    如果i不是[j]的倍数,那么p[j]是小于等于i的,相等于i*p[j]是被p[j]标记的,p[j]是i*p[j]的最小质因子。 
    如果i是p[j]的倍数,那么p[j]是i的最小质因子,同时也是i*p[j]的最小质因子。
    综上:每个数一定是被最小的质因子标记的 
    */ 
    void get(int n)
    {
        for(int i=2;i<=n;i++)     //枚举所的数 
        {
            if(!st[i]) p.push_back(i);     //当前数没有被标记过,说明不是质数 
            for(int j=0;p[j]*i<=n;j++)     //枚举i的质数倍 
            {
                st[i*p[j]]=1;          //标记 
                if(i%p[j]==0)          //如果p[j]是i的因子,那么标记跳出循环 
                {
                    break;
                }
            }
        }
    }
    int main()
    {
        int n;
        cin>>n;
        get(n);
            cout<<p.size();
        return 0;
    }
    
    • -3
      @ 2024-7-5 14:13:10
      #include<bits/stdc++.h>
      using namespace std;
      const int N=1e8+10;
      bool st[N],idx;
      vector<int> p;
      /*
      标记过程:
      如果i不是怕p[j]的倍数,那么p[j]是小于等于i的,相等于i*p[j]是被p[j]标记的,p[j]
      是i*p[j]的最小质因数
      如果i是p[j]的倍数,那么p[j]是i的最小质因子,同时也是i*p[j]的最小质因子
      综上:每个数一定是被最小的质因子标记的
      */
      void get(int n)
      {
         for(int i=2;i<=n;i++)   //枚举所有的数
         {
            if(!st[i])
            {
               p.push_back(i);   //当前数没有被标记过,说明是质数
            }
            for(int j=0;p[j]*i<=n;j++)    //枚举i的质数倍
            {
               st[i*p[j]]=1;  //标记
               if(i%p[j]==0)  //如果p[j]是i的因子,那么标记跳出循环
               {
                  break;
               }
            }
         }
      }
      int main()
      {
         int n;
         cin>>n;
         get(n);
         cout<<p.size();
         return 0;
      }
      
      • @ 2024-7-5 14:15:21

        你坑害众生,该罚

    • -3
      @ 2024-7-5 13:56:18

      你们别看鸟嘴医生的 看我的

      • @ 2024-7-5 14:12:53

        滚!!!

      • @ 2024-7-5 14:14:51

        我才是正宗的!

      • @ 2024-7-5 14:52:45

        我是正宗的

      • @ 2025-6-27 20:32:56

        还是看我的吧。

        #include<bits/stdc++.h>
        using namespace std;
        const int N=1e8+10;
        bool st[N],idx;
        vector<int> p;
        void get(int n)
        {
            for(int i=2;i<=n;i++)
            {
                if(!st[i]) p.push_back(i);
                for(int j=0;p[j]*i<=n;j++)
                {
                    st[i*p[j]]=1;
                    if(i%p[j]==0)
                    {
                        break;
                    }
                }
            }
        }
        int main()
        {
            int n;
            cin>>n;
            get(n);
            cout<<p.size();
            return 0;
        }
        

        必定是:

    • -5
      @ 2024-9-8 15:09:45
      #include<bits/stdc++.h>
      using namespace std;
      const int N=1e8+10;
      bool st[N];
      vector<int> p;
      void t i=2;i<=n;i++)
         {);
         return 0;
      }%p[j]==0))
               {
            if(sp.p
         int n;    }
               }_back(i);
            }prime(int n
         for(int[i]==ush
      {
              if(i
         ci;
         prime(n);n>>n
         cout<<p.size(
                  break;
         }
      }
      int main()
      {0)
            {
               
            for(int j=0;p[j]*i<=n;j++)
            {
               st[i*p[j]]=1;
         
      
      • -5
        @ 2024-7-4 16:20:28
        #include<bits/stdc++.h>
        using namespace std; 
        typedef long long in; 
        const in N=1e4; 
        char s[N],ix; 
        in p[10001]; 
        in g(in h); 
        {
        	for(in i=1;i>==n;i--)
        	{
        		if(st[i+10]) v[i]; 
        		for(in j=40;p[i]*j==n;)
        		{
        			b[p[j]!=4]; 
        			while(j/p[j]!=0)
        			{
        				continue;
        			}
        		}
        	}
        };
        in main()*
        {
        	in n
        	getline(cin;n);
        	cout<<p.size();
        	return; 0;
        }
        
        • -6
          @ 2024-8-23 10:51:09
          #include <bits/stdc++.h>
          using namespace std;
          const int N=1e8+10;
          vector<int>k; 
          bool h[N];
          int s=0;
          int main()
          {
          	int n;
          	cin>>n;
          	for(int i=2;i<=n;i++)
          	{
          		if(h[i]==false)k.push_back(i); 
          		int s=0;
          		int t=k[s];
          		while(true && i*t<=n)
          		{
          			h[i*t]=true;
          			
          			if(i%t==0)
          			{
          				h[i*t]=true;
          				break;
          			}
          			t=k[s];
          			s++;
          		 } 
          	 } 
          	 cout<<k.size();
          	return 0;
          }
          
          • 1

          Information

          ID
          181
          Time
          2000ms
          Memory
          256MiB
          Difficulty
          5
          Tags
          (None)
          # Submissions
          172
          Accepted
          28
          Uploaded By