Pagini recente » Cod sursa (job #1662722) | Cod sursa (job #3333226) | Cod sursa (job #3345815) | Cod sursa (job #765047) | Cod sursa (job #3340341)
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ifstream fin("mins.in");
ofstream fout("mins.out");
const int NMAX = 1e6;
int n, m;
vector<int> factors[NMAX + 1];
ll answer;
void eratostene() {
for(int i = 2; i * i <= NMAX; i++) {
if(factors[i].empty()) {
for(int j = i; j <= NMAX; j += i) {
factors[j].push_back(i);
}
}
}
}
ll ired(int x) {
int sz = factors[x].size();
ll answer = m;
for(int mask = 1; mask < (1 << sz); mask++) {
ll prod = 1;
for(int i = 0; i < sz; i++) {
if(mask >> i & 1) {
prod *= factors[x][i];
}
}
int sign = (__builtin_popcount(mask) % 2 == 1 ? -1 : 1);
answer += sign * m / prod;
}
// cout << x << ' ' << answer << '\n';
return answer;
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
eratostene();
fin >> n >> m;
n--; m--;
for(int x = 1; x <= n; x++) {
answer += ired(x);
}
fout << answer << '\n';
return 0;
}