1 条题解

  • 0
    @ 2024-9-21 17:19:44

    此题考查对质数判断的理解和优化方法:

    方法一代码:60分

    #include <bits/stdc++.h>
    using namespace std;
    
    bool prime(int x)
    {
    	for(int i=2; i<x; i++)
    		if(x%i==0)
    			return false;
    	return true;
    }
    
    int main()
    {
    	int n,ans = 0;
    	cin >> n;
    	for(int i=2; i<=n; i++)
    	{
    		if(prime(i))
    			ans++;
    	}
    	cout << ans;
    	return 0;
    }
    

    方法二代码:70分

    #include <bits/stdc++.h>
    using namespace std;
    
    bool prime(int x)
    {
    	for(int i=2; i*i<x; i++)
    		if(x%i==0)
    			return false;
    	return true;
    }
    
    int main()
    {
    	int n,ans = 0;
    	cin >> n;
    	for(int i=2; i<=n; i++)
    	{
    		if(prime(i))
    			ans++;
    	}
    	cout << ans;
    	return 0;
    }
    

    方法三代码:90分

    #include <bits/stdc++.h>
    using namespace std;
    
    bool prime(int x)
    {
    	if(x==2||x==3) return true;
    	if(x%6!=1&&x%6!=5) return false;
    	for(int i=5; i*i<=x; i+=6)
    		if(x%i==0||x%(i+2)==0) return false;
    	return true;
    }
    
    int main()
    {
    	int n,ans = 0;
    	cin >> n;
    	for(int i=2; i<=n; i++)
    	{
    		ans+=prime(i);
    	}
    	cout << ans;
    	return 0;
    }
    

    方法四:100分,筛法,不做要求,感兴趣可以研究一下

    #include <bits/stdc++.h>
    using namespace std;
    const int N = 1e7+5;
    int n,ans;
    
    bool isprime[N];
    void getprime()
    {
    	memset(isprime,1,sizeof(isprime));
    	isprime[0]=isprime[1]=0;
    	for (int i=2; i<N; i++)
    	{
    		if (isprime[i])
    		{
    			for (int j=i*2; j<=N; j+=i)
    				isprime[j]=0;
    		}
    	}
    }
    int main()
    {
    	getprime();
    	cin >> n;
    	for (int i=1; i<=n; i++)
    		ans+=isprime[i]; 
    	cout<<ans;
    	return 0;
    }
    

    信息

    ID
    551
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    17
    已通过
    5
    上传者