Cod sursa(job #2883940)

Utilizator vladburacBurac Vlad vladburac Data 1 aprilie 2022 23:55:29
Problema Mins Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <iostream>
#include <fstream>
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];
int main() {
  int n, m, gcd, i, k = 0;
  long long j, fractiiIred, nr;
  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 = ( long long ) prime[i] * prime[i]; j <= MAXN; j += ( long long ) 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 = ( long long ) ( ( n - 1 ) / gcd ) * ( ( m - 1 ) / gcd );
      if( divprimi[gcd] % 2 == 1 )
        fractiiIred -= nr;
      else
        fractiiIred += nr;
    }
  }
  fout << fractiiIred;
}