1.1好素数
題目
題意:一個好素數(shù)的定義是,他是一個素數(shù),然后他的左右兩邊10區(qū)間內(nèi)存在素數(shù),那么他就是好素數(shù),現(xiàn)在讓你輸入一個數(shù)字,這個數(shù)字以內(nèi)的好素數(shù)的數(shù)量。
解題方法:先把每一個數(shù)字是不是素數(shù)判斷出來,打個表,要用篩法,或者用線性篩,然后在進(jìn)行3到n的循環(huán),如果他是素數(shù),就判斷他的左右兩邊是不是有沒有素數(shù),如果有,答案就加一。最后輸出就可以了。
代碼
#include<iostream> #include<stdio.h> #include<stdlib.h> #include <iomanip> #include<cmath> #include<float.h> #include<string.h> #include<algorithm> #include<vector> #include<queue> #define sf scanf #define pf printf #define scf(x) scanf("%d",&x) #define scff(x,y) scanf("%d%d",&x,&y) #define prf(x) printf("%d\n",x) #define mm(x,b) memset((x),(b),sizeof(x)) #define rep(i,a,n) for (int i=a;i<n;i++) #define per(i,a,n) for (int i=a;i>=n;i--) typedef long long ll; const ll mod=1e9+7; const double eps=1e-8; const int inf=0x3f3f3f3f; using namespace std; const double pi=acos(-1.0); const int N=1e5+12; bool sushu[N]; int judge(int a) //判斷是不是素數(shù) {int l=a-10,r=a+10,temp=0;if(l<1) l=1;//左邊不能小于1rep(i,l,a){if(sushu[i]){temp++;break; } //有就加temp加一,然后跳出}rep(i,a+1,r+1){if(sushu[i]){temp++;break;}//有就加temp加一,然后跳出}if(temp==2) return true;//要左右兩邊都有,那么之前就要加兩次,必須是2 的時候才能符合好素數(shù)return false; } int main() {mm(sushu,true);//全都復(fù)制為sushu[0]=sushu[1]=false;int n;scf(n);rep(i,2,sqrt(n)+10){if(sushu[i]) //如果是素數(shù)就進(jìn)入篩選{for(int j=i*i;j<n+15;j+=i)//判斷是不是素數(shù)要比n大一些,不能剛好到n不然不夠用sushu[j]=false;}}int ans=0;rep(i,3,n+1){if(sushu[i])if(judge(i))ans++;}prf(ans);return 0; }轉(zhuǎn)載于:https://www.cnblogs.com/wzl19981116/p/10041753.html
總結(jié)
- 上一篇: 梦到老公掉井里了什么预兆
- 下一篇: 随机梯度下降