多组输入,每行输入一个正整数(不大于100)。
针对每行输入的整数n,输出两行,第一行,输出n之内(包括n)的素数,用空格分隔,
第二行,输出数组中2之后被清0 的个数。每行输出后换行。
20
2 3 5 7 11 13 17 19 11
int main() { int n = 0; scanf("%d", &n); int arr[100] = { 0 }; int i = 0; int count = 0; for (i = 0; i < n - 1; i++) { arr[i] = i + 2; } int j = 0; for (i = 0; i < n - 1; i++) { if (arr[i] != 0 && arr[i] > 2) { for (j = 2; j <= n; j++) { if (arr[i] % j == 0 && j != arr[i]) { count++; arr[i] = 0; break; } } } } for (i = 0; i < n - 1; i++) { if (arr[i] != 0) { printf("%d ", arr[i]); } } printf("\n%d\n", count); return 0; }
#include<stdio.h> void Generate(int arr[],int n) { int i = 0; int j = 0; for(i=2;i<=n;i++) { arr[j]=i; j++; } } int Calculate(int arr[],int n) { int i = 0; int j = 0; int count = 0; for(i=2;i<=n;i++) { for(j=i-1;j<n-1;j++) { if(arr[j]%i==0) { arr[j]=0; } } } for(i=0;i<n-1;i++) { if(arr[i]==0) count++; } return count; } void My_printf(int arr[],int n,int count) { int i = 0; for(i = 0;i<n-1;i++) { if(arr[i]!=0) { printf("%d ",arr[i]); } } printf("\n"); printf("%d ",count); } int main() { int n = 0; int arr[100]; while(scanf("%d\n",&n)!=EOF) { Generate(arr,n); int count = Calculate(arr,n); My_printf(arr,n,count); } }
#include <stdio.h> #include <math.h> int main() { int n, num = 0; scanf("%d", &n); int i = 0, j = 0; for (i = 2; i <= n; i++) { for (j = 2; j <= sqrt(i); j++) { if (i % j == 0) break; } if (j > sqrt(i)) { printf("%d ", i); num++; } } printf("\n%d", n - num - 1); return 0; }
//通过在向数组输入数据的过程中,进行是否为素数判断,保证数组(素数位)输入的是0 #include <stdio.h> //函数:判断i是否位素数 int chick(int i){ for (int j = 2; j < i; j++) { if (i%j == 0) { return 1; } } return 0; } int main() { int n, count = 0; scanf("%d",&n); int a[n]; //向数组中写入数据,同时调用chick()判断需要输入0的位置 for (int i = 2; i <= n; i++) { if (chick(i)) { a[i] = 0; count++; }else { a[i] = i; } } //输出 for (int i = 2; i <= n; i++) { if (a[i] == i) { printf("%d ",i); } } printf("\n%d",count); return 0; }
#include <stdio.h> int main() { int n = 0; while(scanf("%d", &n) != EOF) { int count = 0; for (int i = 2; i < n; i++) { int m = 0; for (int j = 2; j < i; j++) { if(i % j == 0) { count++; m++; break; } } if(m==0) { printf("%d ", i); } } printf("\n%d ", count + 1); } return 0; }
#include <stdio.h> #include <stdlib.h> #include <stdbool.h> bool IsPrime(int n) { int flag = 0; //2是特殊的一个素数 for(int i = 2; i < n - 1; i++) { if(n % i == 0 && n != 2) { flag++; break; } } return flag == 0; } void Distincy(int n) { int count =0; for(int i = 2; i <= n; i++) { //a[i]不是素数,或者不是 int tmp = i; if(!IsPrime(tmp)) { tmp = 0; count++; } //不是素数已经为0,不为零的是素数 if(tmp != 0) printf("%d ", tmp); } printf("\n"); printf("%d", count); } int main() { int n; scanf("%d", &n); Distincy(n); return 0; }
#include <stdio.h> #include <math.h> int main() { int n = 0; int i = 0; int j = 0; int flag = 0; int count = 0; while (scanf("%d", &n) != EOF) { for(i = 2; i <= n; i++) { flag = 1; for(j = 2; j <= sqrt(i); j++) { //不是素数 if(i % j == 0) { flag = 0; } } //是素数 if(flag) { printf("%d ", i); count++; } } //不是素数的数量 printf("\n%d\n", n - count - 1);//从2清零开始,所以要-1 } return 0; }
#include <stdio.h> int main() { int n; scanf("%d", &n); int arr[n+1]; for(int i=2; i<=n; i++){ arr[i]=i; } //输入 int sum=0; printf("2 3 5 7 "); for(int i=2; i<=n; i++){ if(arr[i]%2 == 0){ arr[i] = 0; sum++; }else if(arr[i]%3 == 0){ arr[i] = 0; sum++; }else if(arr[i]%5 == 0){ arr[i] = 0; sum++; }else if(arr[i]%7 == 0){ arr[i] = 0; sum++; }else{ printf("%d ", arr[i]); } } printf("\n%d\n", sum-4); return 0; }
#include <stdio.h> int main() { int n = 0; while (scanf("%d", &n) != EOF) { int arr[101]; int i = 0; //存储数据 for (i = 2; i <= n; i++) { arr[i] = i; } int j = 0; for (j = 2; j <= n; j++) { int k = 0; for (k = j + 1; k <= n; k++) { if (arr[k] % j == 0) { arr[k] = 0; } } } int count = 0; for (i = 2; i <= n; i++) { if (arr[i] != 0) printf("%d ", arr[i]); else count++; } printf("\n%d\n", count); } return 0; }
#include <stdio.h> int main() { int n; while(scanf("%d\n",&n) != EOF) { int i,pm; int arr[n]; for(i=0;i<n;i++) { arr[i] = i+1;//将1~n之间的数赋值给arr } int count = 0; for(i=2;i<n;i++) { int j; for(j=i;j<n;j++) { if(i != 0&&arr[j]%i == 0)//拿i%j,整除的就赋值为零 { arr[j] = 0; } } if(arr[i] == 0)//如果arr[i]被赋值为零,个数加一 { count++; } } for(i=1;i<n;i++)//打印二及其之后的数 { if(arr[i] != 0)//取其不为零的数 { printf("%d ",arr[i]); } } printf("\n%d",count);//先换行再打印 } return 0; }
#include <stdio.h> int main(){ int n, i, j, cnt; while ((scanf("%d", &n)) != EOF){ int arr[n-1]; cnt = 0; for (i=0; i<n-1; i++){ arr[i] = 2 + i; } for (j=2; j<=n; j++){ for (i=0; i<n-1; i++){ if (arr[i]%j==0 && arr[i]>j){ arr[i] = 0; } } } for (i=0; i<n-1; i++){ if (arr[i] != 0){ printf("%d ", arr[i]); } else{ cnt++; } } printf("\n%d\n", cnt); } return 0; }
#include <stdio.h> int main() { int n = 0; int arr[101] = {0}; while(scanf("%d",&n)!=EOF) { int k = 2,count = 0; while(k<=n) { for(int i = k+1;i<=n;i++) { if(i%k==0) arr[i] = 1; } k++; } for(int i = 2;i<=n;i++) { if(arr[i] == 0) printf("%d ",i),count++; else arr[i] = 0; } printf("\n%d\n",n-2+1-count);//总数减素数个数为筛去个数 } return 0; }