Pagini recente » Cod sursa (job #1971085) | Cod sursa (job #2956870) | Cod sursa (job #3208261) | Diferente pentru implica-te/arhiva-educationala intre reviziile 3 si 4 | Cod sursa (job #341710)
Cod sursa(job #341710)
#include <stdio.h>
#include <math.h>
#define maxn 2000010
#define maxnr 2000010
using namespace std;
long long n, m, r, nr, pr, sum, d, x, wq, j, div;
long long sol;
long long dp[maxnr], f[maxnr], num[maxn];
char ciur[maxnr];
long long i, l, nrb, ndp;
void inex(long long nr, long long tip)
{
long long c = (long long)(n / nr) * (m / nr);
if(tip==0)
{
sol+=c;
}
else
{
sol-=c;
}
}
void back(long long nr, long long div, long long poz)
{
long long x;
inex(nr, div%2);
for(long long y=poz; y<=wq; y++)
{
x=nr*num[y];
if(x<=n)
{
back(nr*num[y], div+1, y+1);
}
else
{
return;
}
}
}
int main()
{
freopen("mins.in", "r", stdin);
freopen("mins.out", "w", stdout);
scanf("%d %d\n", &n, &m);
n--;
m--;
if(n>m)
{
sol=n;
n=m;
m=sol;
}
sol=0;
r=(long) sqrt(m);
for(i=2; i<=m; i++)
{
if(ciur[i]==0)
{
wq++;
num[wq]=i;
if(i<=r )
{
for(j=i*i; j<=m; j+=i)
{
ciur[j]=1;
}
}
}
}
back(1, 0, 1);
printf("%lld\n", sol);
return 0;
}