这是从刘汝佳的算法竞赛入门经典中看到的题,书中是这么描述的
给出正整数n和m,输出在[m, n]中的无平方因子数。PS(无平方因子数的概念请自行百度)
#include<stdio.h>
#include<string.h>
#include<math.h>
bool visited[10000005];
int prime[500000];
int main(){
int n, m;
scanf("%d", &n, &m);
int i, j, c = 0;
int r = sqrt(n + 0.5);
memset(visited, 0, sizeof(visited));
for (i = 2; i <= r; i++){
if (!visited[i]){
prime[c++] = i;
for (j = i * i; j <= n; j += i)
visited[j] = 1;
}
}
memset(visited, 0, sizeof(visited));
for (i = 0; i < c; i++){
for (j = prime[i] * prime[i]; j <= n; j += prime[i] * prime[i])
visited[j] = 1;
}
for (i = m; i <= n; i++){
if (!visited[i])
printf("%d ", i);
}
return 0;
}
书中给出的思想是先筛选一遍素数, 然后再用素数筛选一遍无平方因子数。