//接收N,生成素数序列arr[2N],其中素数最大素数小于2N,
//for循环用公式计算d[2N],
//for循环判断d是否为2,并用sum统计
#include<cstdio>
int n=0;
int len=3;//arr长度
int sum=0;//素数对数目
int arr[10000]={0};
void primenum(int n,int arr[]);
int main(void)
{
scanf("%d",&n);
if(n<5) {
printf("%d",0);
return 0;
}
arr[0]=2;
arr[1]=3;
arr[2]=5;
primenum(n, arr);
// int d[len+100]={0};
for(int i=0;arr[i+1]<n+1;i++){
// d[i]=arr[i+1]-arr[i];
// if(d[i]==2) sum++;
if((arr[i+1]-arr[i])==2) sum++;
}
printf("%d", sum);
return 0;
}
void primenum(int n, int arr[]){
for(int i=6;i<2*n;i++){//从6开始生成素数
bool flag= true;
for(int j=0;j<len;j++){
if(i % arr[j] ==0){
flag=false;
break;
}
}
if(flag == true){
len++;
arr[len-1]=i;
}
}
}
我拷贝了代码运行了一下,没问题啊,50000以内都没问题。
楼主的arr数组太大了,不知道会不会是这个问题,我之前定义过大数组出现段错误。
如果是因为数组太大,可以把arr改成int型指针,用malloc()分配内存空间。
int *arr;//原int arr[10000]={0};
arr = (int *)malloc(10000*sizeof(int));//include<string>给arr分配内存
memset(arr,0,10000*sizeof(int));//include<stdio.h>赋值0
没必要按引用调用
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y