題目連結:傳送門
求小于等于的數中能表示成的數的個數
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <complex>
#include <algorithm>
#include <climits>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <iomanip>
#define
#define
using namespace std;
typedef long long ll;
ll pri[17] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59};
ll n;
ll calc(ll a) {
return pow(n, 1.0 / a) - 1;
}
int main(int argc, char const *argv[]) {
while (cin >> n) {
ll c1 = 0, c2 = 0, c3 = 0;
for (int i = 0; i < 17; i++) c1 += calc(pri[i]);
for (int i = 0; i < 17; i++)
for (int j = i + 1; j < 17; j++)
c2 += calc(pri[i] * pri[j]);
for (int i = 0; i < 17; i++)
for (int j = i + 1; j < 17; j++)
for (int k = j + 1; k < 17; k++)
c3 += calc(pri[i] * pri[j] * pri[k]);
cout << c1 - c2 + c3 + 1 << endl;
}
}