Pagini recente » Cod sursa (job #985292) | Cod sursa (job #2552967) | Cod sursa (job #9291) | Cod sursa (job #1173362) | Cod sursa (job #352407)
Cod sursa(job #352407)
using namespace std;
#include<cstdio>
#include<vector>
#define MAX_N 1000002
struct Lista
{
bool ok;
vector<int>A;
};
Lista U[MAX_N];
int N, c, d;
void eratostene()
{
int i,j;
N = c;
if(d < N) N = d;
for(i=2;i<=N;++i) U[i].ok = 0;
for(i=4;i<=N;i+=2)
{
U[i].ok = 1;
U[i].A.push_back(2);
}
U[2].A.push_back(2);
for(i=3;i<=N; i+=2)
{
if(U[i].ok == 0)
{
U[i].A.push_back(i);
for(j=2*i; j<=N; j+=i)
{
U[j].ok = 1; U[j].A.push_back(i);
}
}
}
}
int phi(int X, int Y) // nr de numere prime cu X mai mici ca Y
{
int sol = Y, i,j,p,nr;
int n = U[X].A.size();
for(i = 1; i<(1<<n); ++i)
{
for( p = 1, j = 0, nr = 0; j < n; ++j)
if((1<<j) & i) { ++nr; p*=U[X].A[j]; }
if(nr&1) sol -= Y/p;
else sol += Y/p;
}
return sol;
}
int main()
{
freopen("mins.in","r",stdin);
freopen("mins.out","w",stdout);
scanf("%d%d",&c,&d);
int i,j, min, max;
long long unsigned sol = 0;
min = c-1; if(min > d-1) min = d-1;
max = c-1; if(max < d-1) max = d-1;
eratostene();
for(i = 1; i <= min; ++i)
sol += phi(i,max);
printf("%llu\n",sol);
return 0;
}