Pagini recente » Cod sursa (job #625072) | Cod sursa (job #175016) | Cod sursa (job #870791) | Cod sursa (job #3192326) | Cod sursa (job #2883938)
#include <iostream>
#include <fstream>
#define int long long
using namespace std;
const int MAXN = 1e6;
ifstream fin( "mins.in" );
ofstream fout( "mins.out" );
// trebuie sa determinam toate fractiile ireductibile a / b
int divprimi[MAXN+1];
int prime[MAXN+1];
signed main() {
int n, m, gcd, fractiiIred, nr, i, j, k = 0;
for( i = 2; i <= MAXN; i++ ) {
if( divprimi[i] == 0 ) {
prime[k++] = i;
for( j = i; j <= MAXN; j += i )
divprimi[j]++;
}
}
for( i = 0; i < k; i++ ) {
for( j = prime[i] * prime[i]; j <= MAXN; j += prime[i] * prime[i] )
divprimi[j] = -1;
}
fin >> n >> m;
fractiiIred = 0;
for( gcd = 1; gcd < min( n, m ); gcd++ ) {
if( divprimi[gcd] != -1 ) {
nr = ( ( n - 1 ) / gcd ) * ( ( m - 1 ) / gcd );
if( divprimi[gcd] % 2 == 1 )
fractiiIred -= nr;
else
fractiiIred += nr;
}
}
fout << fractiiIred;
}