Cod sursa(job #756775)

Utilizator harababurelPuscas Sergiu harababurel Data 10 iunie 2012 14:02:19
Problema Sum Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <iostream>
#include <fstream>
#include <cstdio>
using namespace std;

int main() {
	ifstream f("sum.in");
    freopen ("sum.out","w",stdout);

	int n=0, i, j, t, phi[200005], x[100005];
	long long rez;

	
	f>>t;
	for(i=1; i<=t; i++) {
		f>>x[i];
		if(2*x[i]>n) n=2*x[i];	//n = 2*max(x[i])
	}
	
	for(i=1; i<=n; i++) phi[i] = i;	    //indicatorul lui euler (phi[i] = nr de numere prime cu i, mai mici decat i)
	for(i=2; i<=n; i++) {				//initializez cu i, si din toti multiplii lui i scad phi[i]
		if(phi[i]==i) 					//optimizare: ma duc doar pe multipli de numere prime
		for(j=i; j<=n; j+=i) {			//aka il calculez folosind ciurul 
			phi[j] /= i;
			phi[j] *= (i-1);
		}
	}
	
	for(i=1; i<=t; i++) {
		//g<<1LL*phi[x[i]]*2*x[i]<<"\n";		//ceva formula dedusa
		rez=1LL*phi[x[i]]*2*x[i];
		printf("%lld\n",rez);
	}
	
	f.close();
	return 0;
}