题意:给定一个数n,判断从2—n中的素数个数是多少。
KEY:这里有两种做法,一是没注释那个代码测试极端数据999999就会错的,二是注释掉的那段代码才能AC。对于一眼看上去很简单的题目,特别要注意时间复杂度。
#include <iostream> #include <stdio.h> #include <string.h> const int maxn = 999999 + 5; int num[maxn]; using namespace std; int main() { int t; int n, m; while(scanf("%d", &t) != EOF){ int m = 0; memset(num, 0, sizeof(num)); n = m = 0; for(int i = 3; i <= t; i++){ n = 0; for(int j = 2; j < i; j++){ if(i % j != 0) n++; else break; } if(n == (i - 2)) m++; // } //for(int i = 0; i <= t; i++){ // num[i] = i; // } // for(int i = 2; i <= t; i++){ // if(num[i] != 0){ // //num[i] = 0; // for(int j = 2; j * i <= t; j++){ // num[j * i] = 0; // } // } // } // for(int i = 2; i <= t; i++){ // if(num[i] != 0) // m++; // } } printf("%d\n", m + 1); // printf("%d\n", m); } return 0; }
时间: 2024-11-18 18:51:17