Pagini recente » Cod sursa (job #2604968) | Cod sursa (job #1086706) | Cod sursa (job #957890) | Cod sursa (job #2138515) | Cod sursa (job #3250111)
#include <fstream>
using namespace std;
ifstream f("mins.in");
ofstream g("mins.out");
int c,d,mn,mx,rez,i,j,k,fact,p,x,m,s,nrc, v[1000005];
int main()
{
f>>c>>d;
c--; d--;
mn=min(c,d); mx=max(c,d);
rez=mx; // toate numerele sunt prime cu 1
for(i=2;i<=mn;i++)
{
// se construieste vectorul cu factorii primi ai lui i (v cu m elem)
x=i;
m=0;
fact=2;
while (x>1)
{
if(x%fact==0)v[++m]=fact;
while(x%fact==0) x=x/fact;
fact++;
if(fact*fact>x) fact=x;
}
s=mx; // s=nr. de numere prime cu i care sunt <= mx (scad din mx numerele neprime cu i)
for(j=1; j < (1 << m); j++)
{
nrc = 0; // numarul de elemente din submultimea curenta
p = 1; // produsul elementelor din submultimea curenta
for(k = 0;k < m; k++)
if(j & (1 << k))
{
nrc++;
p = p * v[k + 1];
}
if(nrc % 2 == 1) s = s - mx / p;
else rez = s + mx / p;
}
rez+=s;
}
g<<rez<<'\n';
return 0;
}