#include <stdio.h> int main() { int i = 0, n = 0, j = 0, arr[200] = { 0 }; int count = 0; while (scanf("%d", &n) != EOF) { for (i = 2; i <= n; i++) { arr[i] = i; } for (i = 2; i <= n; i++) { //取出从2到n每一个数 for (j = 2; j < i; j++) { //题目中说2之后所有数被2整除清零,3之后的所有数被3整除清零,以此类推,那么可以得出,当这个数为3时,一定会和2进行整除;当这个数为4时,一定会被2和3进行整除;当这个数为5时,一定会被2,3,4进行整除。因此得出该算法。 if (i % j == 0) { arr[i] = 0; } } } for (i = 2; i <= n; i++) { if (arr[i] != 0) { printf("%d ", i); } else { count++; } } printf("\n"); printf("%d\n", count); } return 0; }