1.1好素数

题目
1.1好素数_第1张图片

题意:一个好素数的定义是,他是一个素数,然后他的左右两边10区间内存在素数,那么他就是好素数,现在让你输入一个数字,这个数字以内的好素数的数量。

解题方法:先把每一个数字是不是素数判断出来,打个表,要用筛法,或者用线性筛,然后在进行3到n的循环,如果他是素数,就判断他的左右两边是不是有没有素数,如果有,答案就加一。最后输出就可以了。

代码

#include
#include
#include
#include 
#include
#include 
#include
#include
#include
#include
#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--)
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)    //判断是不是素数
{
    int l=a-10,r=a+10,temp=0;
    if(l<1) l=1;//左边不能小于1
    rep(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 的时候才能符合好素数
    return false;
}
int main()
{
    mm(sushu,true);//全都复制为
    sushu[0]=sushu[1]=false;
    int n;
    scf(n);
    rep(i,2,sqrt(n)+10)
    {
        if(sushu[i])        //如果是素数就进入筛选
        {
            for(int j=i*i;j

转载于:https://www.cnblogs.com/wzl19981116/p/10041753.html

你可能感兴趣的:(1.1好素数)