Pagini recente » Cod sursa (job #46220) | Cod sursa (job #2757603) | Cod sursa (job #1217292) | Cod sursa (job #345379) | Cod sursa (job #2196034)
#include <bits/stdc++.h>
#define DM 1005
#define pb push_back
#define ll long long
using namespace std;
ifstream fin("mins.in");
ofstream fout("mins.out");
ll c,d,ans;
vector<ll>pr,desc;
bitset<DM>isPrime;
void ciur(){
isPrime[0]=isPrime[1]=1;
int i=2;
for(;i*i<DM;++i) if(!isPrime[i]){
pr.pb(i);
for(int j=i*i;j<DM;j+=i)
isPrime[j]=1;
}
for(;i<DM;++i) if(!isPrime[i])
pr.pb(i);
}
void descomp(int x){
desc.clear();
for(auto i:pr){
if(x%i==0){
desc.pb(i);
while(x%i==0) x/=i;
}
if(x==1) break;
}
if(x>1) desc.pb(x);
}
int getAns(){
int ansPart,a;
ansPart = a = max(c,d);
for(int i=1;i<(1<<desc.size());++i){
ll prod=1,cnt=0;
for(int j=0;(1<<j)<=i;++j) if((1<<j)&i)
cnt++,prod*=desc[j];
if(cnt%2) ansPart-=a/prod;
else ansPart+=a/prod;
}
return ansPart;
}
int main()
{
fin>>c>>d;
c--,d--;
ciur();
ans=0;
for(int i=1;i<=min(c,d);++i){
descomp(i);
ans+=getAns();
}
fout<<ans;
return 0;
}