题目链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805317546655744
这道题比较简单,但是自己的做法稍微复杂了一点:
先将100000范围的素数都找出来保存在数组prime[]中,然后再用循环去判断。看了晴神的做法,自己确实有点傻逼,哈哈哈
#include<bits/stdc++.h> using namespace std; const int maxn = 100010; int prime[maxn]; bool isPrime(int num) { //判断num是不是素数(模板,无需多解释了) if(num <= 1) return false; for(int i = 2; i <=(int)sqrt(num*1.0);i++) { if(num%i == 0) return false; } return true; } int main() { int N; scanf("%d",&N); int ans = 0; for(int i = 2; i < maxn; i++) { if(isPrime(i)) prime[ans++] = i; } int count = 0; for(int i = 0; i <= N; i++) { if(prime[i+1] <= N) { if(prime[i+1]-prime[i] == 2) { count++; //cout<<prime[i]<<" "<<prime[i+1]<<endl; } } else break; } printf("%d\n",count); return 0; }
//晴神的代码 #include<bits/stdc++.h> using namespace std; bool isPrime(int num) { //判断num是不是素数(模板,无需多解释了) if(num <= 1) return false; for(int i = 2; i <=(int)sqrt(num*1.0);i++) { if(num%i == 0) return false; } return true; } int main() { int N; scanf("%d",&N); int count = 0; for(int i = 3; i+2 <= N; i+=2;) { if(isPrime(i)&&isPrime(i+2)) cout++; } printf("%d\n",count); return 0; }