Cod sursa(job #756773)

Utilizator harababurelPuscas Sergiu harababurel Data 10 iunie 2012 13:57:47
Problema Sum Scor 75
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <iostream>
#include <fstream>
#include <stdio.h>
using namespace std;

int main() {
	ifstream f("sum.in");
    FILE * g;
    g = fopen ("sum.out","w");

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

	
	f>>t;
	for(i=1; i<=t; i++) {
		f>>x[i];
		if(x[i]>n) n=x[i];	//n = max(x[i])
	}
	
	n*=2;	//n = 2*max(x[i]) -> pana unde calculez functia phi()
	
	
	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
		fprintf(g, "%Ld\n",phi[x[i]]*2*x[i]);
	}
	
	
	f.close();
	fclose(g);
	return 0;
}