BC127. 筛选法求素数
描述
用筛选法求n以内的素数。筛选法求解过程为:将2~n之间的正整数放在数组内存储,将数组中2之后的所有能被2整除的数清0,再将3之后的所有能被3整除的数清0 ,以此类推,直到n为止。数组中不为0 的数即为素数。输入描述
多组输入,每行输入一个正整数(不大于100)。输出描述
针对每行输入的整数n,输出两行,第一行,输出n之内(包括n)的素数,用空格分隔,示例1
输入:
20
输出:
2 3 5 7 11 13 17 19 11
C 解法, 执行用时: 1ms, 内存消耗: 316KB, 提交时间: 2021-10-23
#include <stdio.h> int main() { int i,j,n,a[100]; int sum=0; //最后数组中0的个数 while(scanf("%d",&n)!=EOF){ for(i=2;i<=n;i++){ //将值导入数组(2--n) a[i-2]=i; //a0--a[n-2] } for(j=2;j<=n;j++){ /* 从a[1]到a[n-2]判断数值是否能整除2, 每循环一次初始循环的数组下标+1,整除数+1*/ for(i=j-1;i<n-1;i++){ if(a[i]%j==0) a[i]=0; } } for(i=0;i<n-1;i++){ //输出不为0的数据并计算等于0的个数 if(a[i]!=0) printf("%d ",a[i]); else sum++; }printf("\n%d",sum); //换行输出等于0的个数 } return 0; }
C 解法, 执行用时: 1ms, 内存消耗: 356KB, 提交时间: 2021-06-26
#include <stdio.h> int main() { int a=0; int count = 0; while(~scanf("%d",&a)) { int i=0; int j=0; for(i=2;i<=a;i++) { for(j=2;j<=sqrt(i);j+=1) { if(i%j == 0) { break; } } if(j>sqrt(i)) { printf("%d ",i); count++; } } } printf("\n"); printf("%d",a-count-1); return 0; }
C 解法, 执行用时: 1ms, 内存消耗: 360KB, 提交时间: 2021-09-10
#include <stdio.h> int main() { int i,j,n,a[100]; int sum=0; while(scanf("%d",&n)!=EOF){ for(i=2;i<=n;i++){ a[i-2]=i; } for(j=2;j<=n;j++){ for(i=j-1;i<n-1;i++){ if(a[i]%j==0) a[i]=0; } } for(i=0;i<n-1;i++){ if(a[i]!=0) printf("%d ",a[i]); else sum++; }printf("\n%d",sum); } return 0; }
C 解法, 执行用时: 1ms, 内存消耗: 368KB, 提交时间: 2021-02-21
#include <stdio.h> int main() { int n, i, j, count; scanf("%d",&n); for(i=2;i<=n; i++) { for(j=2; j<=i; j++) { if(i%j==0) break; } if(i==j) { printf("%d ", i); count++; } } printf("\n"); printf("%d ", n-count-1); return 0; }
C 解法, 执行用时: 1ms, 内存消耗: 372KB, 提交时间: 2021-07-16
#include<stdio.h> int main() { int n,a[100],i,j,num=0; while(scanf("%d",&n)!=EOF) { for(i=2;i<=n;i++) { a[i]=i; } for(i=2;i<=n;i++) { for(j=i+1;j<=n;j++) { if(a[j]%i==0) a[j]=0; } } } for(i=2;i<=n;i++) { if(a[i]!=0) printf("%d ",a[i]); if(a[i]==0) num++; } printf("\n"); printf("%d\n",num); }