Cod sursa(job #1699514)

Utilizator andreicoman299Coman Andrei andreicoman299 Data 7 mai 2016 16:20:21
Problema Principiul includerii si excluderii Scor 70
Compilator c Status done
Runda Arhiva educationala Marime 1.04 kb
#include <stdio.h>
#include <stdlib.h>
#define MAXDIV 100

long long dvz[MAXDIV], ind;
int main(){
    long long m, a, b, i, j;
    long long rez=0;
    FILE*fi,*fo;
    fi=fopen("pinex.in","r");
    fo=fopen("pinex.out","w");
    fscanf(fi,"%lld", &m);
    for(i=0;i<m;i++){
        fscanf(fi,"%lld%lld", &a, &b);
        rez=0;
        ind=0;
        long long d=2;
        while(d*d<=b){
            if(b%d==0){
                dvz[ind++]=d;
                while(b%d==0)
                    b/=d;
            }
            d++;
        }
        if(b>1)
            dvz[ind++]=b;
        for(j=1;j<(1<<ind);j++){
            long long k, cmmmc=1, nrbit=0;
            for(k=0;k<=ind;k++){
                if(j&(1<<k)){
                    nrbit++;
                    cmmmc*=dvz[k];
                }
            }
            if(nrbit%2==1)
                rez+=a/cmmmc;
            else
                rez-=a/cmmmc;
        }
        fprintf(fo,"%lld\n", a-rez);
    }
    fclose(fi);
    fclose(fo);
    return 0;
}