题目:
代码:
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
int i;
int a[100001]={0},b[100001]={0};
int t=0,k,j,cnt=0;
for(i=2;i<n+1;i++){
if(a[i]==0){
b[t++]=i;
if(b[t]-b[t-1]==2&&t>1){
cnt++;
}
for(j=i+1;j<n+1;j++){
if(j%b[t-1]==0&&a[j]==0){
a[j]=1;
}
}
}
}
for(i=0;i<t-1;i++){
if((b[i+1]-b[i])==2){
cnt++;
}
}
printf("%d",cnt);
return 0;
}
运行超时:
认为是循环太多导致,已进行多次修改,简化循环,结果仍然运行超时。
觉得还是求素数的方法不够简洁,希望能优化程序。
希望能从中得到一个求法的简洁思路
#include <stdio.h>
int isprime(int n)
{
int k = sqrt(n*1.0);
for(int i=2;i<=k;i++)
if(n%i==0)
return 0;
return 1;
}
int main()
{
int n,cnt=0,i=2;
scanf("%d",&n);
while(i<n)
{
if(isprime(i) && isprime(i+2))
cnt++;
i++;
}
printf("%d\n",cnt);
return 0;
}
1.接收数据 int n
2.求出 2 ~ n 以内的素数
3.在范围内筛选
2.3.也可以同时进行
#include <stdio.h>
#include <math.h>
int main(){
//思路分析
/*
1.接收数据 int n
2.求出 2 ~ n 以内的素数
3.在范围内筛选
*/
int n, count = 0, k = 1;
scanf("%d",&n);
int suShu[n];
suShu[0] = 2;
if(n < 5){
printf("%d",0);
}else{
for(int i = 2; i <= n; i++){
int j;
for(j = 2; j <= sqrt(i); j++){
if(i % j == 0){
break;
}
}
if(j > sqrt(i)){
suShu[k] = i;
if(suShu[k] - suShu[k-1] == 2){
count++;
}
k++;
}
}
printf("%d",count);
}
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!