Pagini recente » Istoria paginii runda/drjn | Cod sursa (job #1685542) | Cod sursa (job #764617) | Cod sursa (job #1982339) | Cod sursa (job #2579429)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("mins.in");
ofstream g("mins.out");
long long int n,m,nr[1000005],ciur[1000005],minim,maxim,cap,trap;
long long sum,aux,arie;
int main()
{
f>>n>>m;
n--; m--;
minim=min(n,m); maxim=max(n,m);
for(int i=2;i<=minim;i++)
ciur[i]=1;
arie=(maxim-1)*(maxim)/2-(maxim-minim)*(maxim-minim+1)/2;
aux=0;
for(int i=2;i<=minim;i++)
{
if(ciur[i]==1)
for(int j=i;j<=minim;j+=i)
{
ciur[j]*=i;
nr[j]++;
}
if(ciur[i]==i)
{
cap=minim/i; trap=maxim/i;
cap=trap-cap;
if(nr[i]%2==1)
aux+=(maxim/i)*(maxim/i+1)/2-cap*(cap+1)/2;
else
aux-=(maxim/i)*(maxim/i+1)/2-cap*(cap+1)/2;
}
}
sum+=arie-aux;
for(int i=2;i<=minim;i++)
{ciur[i]=1; nr[i]=0;}
arie=(minim-2)*(minim-1)/2;
aux=0;
for(int i=2;i<=minim;i++)
{
if(ciur[i]==1)
for(int j=i;j<=minim;j+=i)
{
ciur[j]*=i;
nr[j]++;
}
if(ciur[i]==i)
{
if(nr[i]%2==1)
aux+=(minim/i-1)*(minim/i)/2;
else
aux-=(minim/i-1)*(minim/i)/2;
}
}
sum+=arie-aux;
sum+=n+m-1;
g<<sum;
}