Cod sursa(job #1843871)

Utilizator bogdanluncasubogdan bogdanluncasu Data 9 ianuarie 2017 14:52:42
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include<iostream>
#include<stdio.h>
#include<math.h>
#include<string.h>
int n;
bool a[1000001];
void ciur(int n){
	for(int i=2;i<=n/2;i++){
		if(!a[i]){
			for(int j=2*i;j<=n;j+=i){
				a[j]=1;
			}
		}
	}
}


int totient(int q){
	
	int i=2,p=1,prevpower=0;
	while(q!=1){
		if(q%i==0){
			
			prevpower+=1;
			q/=i;
			if(q==1){
				p*=(i-1)*(pow(i,(prevpower-1)));
			}
		}else{
			if(prevpower!=0){
				p*=(i-1)*(pow(i,(prevpower-1)));
			}
			i++;
			prevpower=0;
		} 
	}
	
	return p;
}


int main(){
	freopen("fractii.in", "r", stdin);
	freopen("fractii.out", "w", stdout);
	scanf("%d",&n);
	ciur(n+1);
	long long x,x2=0;
	x=n+n-1;
	for(int i=2;i<=n;i++){
		
		if(!a[i]){
			x2+=i-2;
		}else{
			x2+=totient(i)-1;
		}
		
	}
	
	x+=2*x2;
	printf("%d",x);
}