Cod sursa(job #2347705)

Utilizator _Victor_Victor Ciobanu _Victor_ Data 19 februarie 2019 00:18:49
Problema Principiul includerii si excluderii Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.63 kb
#include <bits/stdc++.h>
#define ll long long
#define MAXN 1000010
using namespace std;

ll D[30];

int main(){
	ifstream cin("pinex.in");
	ofstream cout("pinex.out");
	int t;
	cin>>t;
	while(t--){
		ll a,b,d=2,n=0;
		cin>>a>>b;
		while(b>1){
			if(b%d==0){
				D[n++]=d;
				while(b%d==0)b/=d;
			}
			if(d>sqrt(b) && b>1){
					D[n++]=b;
					b=1;
			}
			if(d==2)d++;
			else d+=2;
		}
		ll s=a,l=(1<<n);
		for(int i=1;i<l;i++){
			ll c=0, prod=1;
			for(int j=0;j<n;j++){
				if((1<<j)&i){
					prod*=D[j];
					c++;
				}
			}
			if(c%2)prod=-prod;
			s+=a/prod;
		}
		cout<<s<<'\n';	
	}
	return 0;
}