#include<stdio.h> int main() { int i,j,N; int x; printf("请输入N,用简单素数筛选法求N以内的素数。\n"); scanf("%d",&N); printf("这其中有\n"); if(N<=1) printf("无\n"); else { printf("2\n"); for(i=3;i<=N;i++) { x=0; for(j=2;j<i;j++) { if(i%j==0) x++; } if(x==0) printf("%d\n",i); } } return 0; }
帮我看看这个怎么错了 #include<math.h> #include<stdio.h> int main() { int i,n,N,k; scanf("%d",&N); for(n=2;n<=N;n++) { k=sqrt(n); for(i=2;i<=k;i=i++) { if(n%i==0) break; } if(i>k) printf("%d",n); } return 0; }
除了2,好像素数都是奇数吧,我能只遍历奇数,然后从中去筛选出素数,会有一定优化么?
编程小顽石 2023-03-18 15:26:31 |
是有优化的遍历数量少了一半
define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int main(){ int a, i=3; scanf("%d", &a); printf("2\n"); for (;i <= a;i++) { if (i%2!=0&&i%3!=0&&i%5!=0&&i%7!=0) { printf("%d\n", i); } } return 0; }这个才好懂
dotcpp0610114 2022-10-23 18:54:18 |
我搞错了
何豪 2023-09-17 20:46:52 |
不对啊,我思路跟你一样,但是数越大之后,筛选能力会变小很大
#include<stdio.h> int main() { int n; scanf("%d",&n); if(n>=2) { printf("2\n"); } for(int i=2;i<=n;i++) { for(int k=2;k<=i-1;k++) { if(i%k==0) { break; } else { printf("%d\n",i); break; } } } return 0; }
向志权 2024-01-16 21:00:09 |
你这个输出只是奇数,不是质数
欧拉筛 #include <iostream> #include <string.h> using namespace std; typedef long long LL; LL prime[100001]; bool vir[100000001]; int main() { memset(prime,0,sizeof(prime)); memset(vir,0,sizeof(vir)); LL n; cin>>n; vir[1]=true; for(LL i=2;i<=n;i++){ if(!vir[i]){ vir[i]=1; prime[++prime[0]]=i; } for(LL j=1;j<=prime[0]&&i*prime[j]<=n;j++){ vir[prime[j]*i]=true; if(i%prime[j]==0) break; } } //cout<<prime[0]; for(int i=1;i<=prime[0];i++) cout<<prime[i]<<endl; return 0; }