Pagini recente » Cod sursa (job #2743342) | Cod sursa (job #1430759) | Cod sursa (job #469612) | Cod sursa (job #2752934) | Cod sursa (job #631058)
Cod sursa(job #631058)
#include<stdio.h>
#include<vector>
#define pb push_back
#define maxdim 1000005
using namespace std;
FILE*f=fopen("mins.in","r");
FILE*g=fopen("mins.out","w");
int c,d,i,j,k,m,conf,nrb; long long sol,r;
int ciur[maxdim],nr[maxdim];
vector<int>G[maxdim];
int main () {
fscanf(f,"%d %d",&c,&d); --c; --d;
for ( i = 2 ; i <= c ; ++i ){
if ( !ciur[i] ){
G[i].pb(i);
for ( j = i + i ; j <= c ; j += i ){
if ( !(j % (i*i)) )
ciur[j] = -1;
G[j].pb(i);
if ( ciur[j] != -1 ) ciur[j] = 1;
}
}
}
for ( i = 2 ; i <= c ; ++i ){
if ( ciur[i] == -1 ){
r = 1;
for ( k = 0 ; k < G[i].size() ; ++k ){
r *= G[i][k];
}
sol += nr[r];
continue ;
}
m = G[i].size();
for ( j = 1 ; j < (1<<m) ; ++j ){
conf = j; r = 1; nrb = 0;
for ( k = 0 ; k < m ; ++k){
if ( conf & 1 ){
r *= G[i][k]; ++nrb;
}
conf >>= 1;
}
if ( nrb & 1 ){
sol += d / r; nr[i] += d / r;
}
else{
sol -= d / r; nr[i] -= d / r;
}
}
}
sol = 1LL * c * d - sol;
fprintf(g,"%lld\n",sol);
fclose(f);
fclose(g);
return 0;
}