题意:给定 m 个质数 p1∼pm,求 1∼n 中有多少个数能被至少一个给定的质数整除。n≤1018,m≤20,pi≤n.
我的代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n;
ll k;
ll a[25];
ll ans = 0;
int main() {
freopen("1.in", "r", stdin);
freopen("1.out", "w", stdout);
cin >> n;
cin >> k;
for (int i = 1; i <= k; i++)
cin >> a[i];
for (int S = 1; S < (1 << k); S++) {
ll L = 1, cnt = 0;
for (int i = 1; i <= k; i++)
if (((S >> (i - 1)) & 1) == 1)
L *= a[i], cnt++;
if (cnt % 2 == 1)
ans += n / L;
else
ans -= n / L;
}
cout << ans << endl;
return 0;
}
提交只过一个点,和AC代码也拍不出来