Pagini recente » Cod sursa (job #2795396) | Cod sursa (job #486354) | Cod sursa (job #2305958) | Cod sursa (job #1406600) | Cod sursa (job #2140420)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("mins.in");
ofstream g("mins.out");
const int rad_max_d = 1000;
int C,D;
int divi[20],fprim[1000], ans;
bool prim[rad_max_d];
void prime()
{
int i, j;
for (i = 2; i < rad_max_d; i++)
prim[i] = 1;
for (i = 2; i < rad_max_d; i++)
if (prim[i])
{
for (j = 2*i; j < rad_max_d; j += i)
prim[j] = 0;
fprim[++fprim[0]] = i;
}
}
int pinex(int x)
{
int k=0, nrdiv=0, i, j;
while (x > 1)
{
k++;
if (x % fprim[k] == 0)
divi[++nrdiv] = fprim[k];
while (x % fprim[k] == 0)
x/=fprim[k];
if (fprim[k] * fprim[k] > x && x>1 )
{
divi[++nrdiv] = x;
x=1;
}
}
int K=(1 << nrdiv);
long long sol=C-1, prod;
int nr,p;
for (i=1;i < K; i++)
{
prod = 1;
nr=0;
for (j=0; j<nrdiv; j++)
{
if (i & (1<<j))
{
prod = 1LL * prod * divi[j+1];
nr++;
}
}
if (nr % 2 != 0) p=-1;
else p=1;
sol += 1LL * p * (C-1) / prod;
}
return sol;
}
int main()
{
f>>C>>D;
prime();
if (C<D) swap(C,D);
for (int i=1;i<D;i++)
ans+=pinex(i);
g<<ans;
return 0;
}