Cod sursa(job #1434803)

Utilizator andrei_diaconu11Andrei C. Diaconu andrei_diaconu11 Data 11 mai 2015 14:35:12
Problema Principiul includerii si excluderii Scor 70
Compilator c Status done
Runda Arhiva educationala Marime 0.96 kb
#include <stdio.h>
#include <stdlib.h>

long long v[50];

int main()
{
    FILE *fi=fopen("pinex.in", "r"), *fo=fopen("pinex.out", "w");
    long long a, b, div, n, val, rez;
    int i, j, m, nrb, y;
    fscanf(fi, "%d", &m);
    for(i=0;i<m;i++){
        fscanf(fi, "%lld%lld", &a, &b);
        div=2;
        j=0;
        while(div*div<=b){
            if(b%div==0){
                while(b%div==0)
                    b/=div;
                v[j]=div;
                j++;
            }
            div++;
        }
        if(b!=1){
            v[j]=b;
            j++;
        }
        n=j;
        rez=0;
        for(j=1;j<(1<<n);j++){
            nrb=0;
            val=1;
            for(y=0;y<n;y++)
                if(j&(1<<y)){
                    val*=v[y];
                    nrb++;
                }
            if(nrb%2==0)
                rez-=a/val;
            else
                rez+=a/val;
        }
        fprintf(fo, "%lld\n", a-rez);
    }
    return 0;
}