Mai intai trebuie sa te autentifici.

Cod sursa(job #2012345)

Utilizator MoodyFaresFares Mohamad MoodyFares Data 18 august 2017 16:11:34
Problema Principiul includerii si excluderii Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <cstdio>
#include <cmath>

long long div[30];

int main() {
  freopen("pinex.in", "r", stdin);
  freopen("pinex.out", "w", stdout);

  long long M, A, B;
  scanf("%lld", &M);
  for (int i = 1; i <= M; i++) {
    scanf("%lld %lld", &A, &B);
    long long k, d;
    k = 0;
    d = 2;
    while (B > 1) {
      if (B % d == 0) {
        div[++k] = d;
        while (B % d == 0) {
          B /= d;
        }
      }
      if (d > sqrt(B) && B > 1) {
        div[++k] = B;
        B = 1;
      }
      if (d == 2) {
        d++;
      } else {
        d += 2;
      }
    }
    long long ans = A;
    for (int i = 1; i < (1 << k); i++) {
      long long nr = 0, p = 1;
      for (int j = 0; j < k; j++) {
        if ( (1 << j) & i) {
          p = 1LL * p * div[j + 1];
          nr++;
        }
      }
      if (nr % 2) {
        nr = -1;
      }
      else {
        nr = 1;
      }
      ans = ans + 1LL * nr * A / p;
    }
    printf ("%lld\n", ans);
  }
  return 0;
}