1 条题解
-
0
此题考查对质数判断的理解和优化方法:
方法一代码: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
- 上传者