Pagini recente » Cod sursa (job #57593) | Cod sursa (job #599558) | Cod sursa (job #685022) | Cod sursa (job #1339865) | Cod sursa (job #2837496)
#include <bits/stdc++.h>
using namespace std;
ifstream in("mins.in");
ofstream out("mins.out");
typedef long long ll;
const int lim=1e6+4;
vector<int> p[lim];
int phi[lim];
bool ok[lim];
int lp[lim];
int c,d;
ll ans;
int main()
{
in>>c>>d; --c,--d;
if(c>d) swap(c,d);
phi[1]=d;
ans+=1LL*phi[1];
for(int i=2;i<=c;++i)
{
if(!ok[i])
{
for(int j=i;j<=c;j+=i)
{
p[j].push_back(i);
ok[j]=true;
}
if(i<=c/i)
for(int j=i*i;j<=c;j+=i*i)
lp[j]=i;
}
if(lp[i]!=0)
{
phi[i]=phi[i/lp[i]];
ans+=1LL*phi[i];
continue;
}
int nr=p[i].size()-1;
int last=p[i].back();
int prod=1;
for(int j=0;j<nr;++j)
prod*=p[i][j];
phi[i]=phi[prod];
for(int mask=0;mask<(1<<nr);++mask)
{
int app=1;
prod=last;
for(int j=0;j<nr;++j)
if(mask&(1<<j))
++app,prod*=p[i][j];
if(app%2==1)
phi[i]-=(d/prod);
else phi[i]+=(d/prod);
}
ans+=1LL*phi[i];
}
out<<ans<<'\n';
return 0;
}