Pagini recente » Borderou de evaluare (job #2270086) | Cod sursa (job #2346262) | Cod sursa (job #710420) | Cod sursa (job #930700) | Cod sursa (job #456925)
Cod sursa(job #456925)
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
const int MAX = 1000015;
const char FIN[] = "mins.in";
const char FOU[] = "mins.out";
int V[MAX] , P[MAX];
int C, D;
ll s;
void solve(int K, int prod, int N, int val)
{
if (K > N || (ll) C < (ll) prod * P[K])
{
if ( val & 1 )
s -= (ll) (D / prod) * (C / prod);
else
s += (ll) (D / prod) * (C / prod);
return;
}
solve (K + 1, prod * P[K], N, val + 1);
solve (K + 1, prod, N, val);
}
int main()
{
freopen(FIN, "r", stdin);
freopen(FOU, "w", stdout);
scanf("%d %d", &C, &D);
if ( C > D ) swap( --C , --D );
//P[++P[0]] = 2;
/*for (int i = 3; i <= D; i += 2)
{
if (V[i >> 4] & (1 << ((i >> 1) & 7))) continue;
P[++P[0]] = i;
for (int j = i + (i << 1); j <= D; j += i << 1)
V[j >> 4] |= 1 << ((j >> 1) & 7);
}*/
for ( int i=2;i<=D + 1;++i)
if (!V[i])
{
for (int j=i+i;j<=D + 1;j+=i)
V[j]=1;
P[++P[0]]=i;
}
solve (1 , 1 , P[0] , 0);
printf("%lld" , s);
return 0;
}