HDU2973
给定
思路:
容易想到威尔逊定理
- 若
是质数,则
易得
则
- 若
不是质数 ,则有 (由威尔逊定理的推论)
设
因此
#include <iostream>
const int M = 1e6 + 5, N = 3 * M + 7;
bool not_prime[N];
int sum[M];
int main() {
for (int i = 2; i < N; ++i)
if (!not_prime[i])
for (int j = 2; j * i < N; ++j)
not_prime[j * i] = 1;
for (int i = 1; i < M; ++i)
sum[i] = sum[i - 1] + !not_prime[3 * i + 7];
int t;
std::cin >> t;
while (t--) {
int n;
std::cin >> n;
std::cout << sum[n] << std::endl;
}
}