Cod sursa(job #1317684)

Utilizator b10nd3Oana Mancu b10nd3 Data 15 ianuarie 2015 02:08:22
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include<stdlib.h>
#include<stdio.h>
#include<iostream>
#include<fstream>
#include<math.h>


using namespace std;

int n;
bool p[1000001];


void initiate_p(){
	for(int i=1;i<=n;i++) p[i]=true;
}


void primeSieve(){
	initiate_p();
	for(int i=2;i<=sqrt(n);i++)
	  if(p[i]==true) for(int j=i;i*j<=n;j++) p[i*j]=false;	       
}


long long totient(){
	long long s=1;
	for(int i=2;i<=n;i++){
		if(p[i]==true) s=s+(i-1)*2; 
	    else{
	      double prod=i;	
	      for(int j=2;j<=i/2;j++)
	         if(p[j]==true && i%j==0)
				 prod=prod*(double)(1-(double)((double)1/(double)j)); 
	       s=s+(long)prod*2;     
		}
	}
     return s;	
}


int main(){
ifstream in; ofstream out;
in.open("fractii.in"); out.open("fractii.out");
out.clear();
in>>n;
primeSieve();
out<<totient();
return 0;	
}