类似于素数筛的思想去做,不然暴力会超时而且还要判重
#include#include #include #define REP(i, a, b) for(int i = (a); i < (b); i++)using namespace std;const int MAXN = 1123456;int vis[MAXN];vector prime;int f[MAXN];void init(){ memset(vis, -1, sizeof(vis)); for(int i = 5; i < MAXN; i += 4) for(int j = 5; i * j < MAXN; j += 4) { if(vis[i] == -1 && vis[j] == -1) vis[i * j] = 1; else vis[i * j] = 0; } int sum = 0; REP(i, 1, MAXN) { if(i % 4 == 1 && vis[i] == 1) sum++; f[i] = sum; }}int main(){ init(); int n; while(~scanf("%d", &n) && n) printf("%d %d\n", n, f[n]); return 0;}