Pagini recente » Diferente pentru problema/cave intre reviziile 1 si 2 | Cod sursa (job #2164978) | Cod sursa (job #1064116) | Cod sursa (job #1864554) | Cod sursa (job #3309004)
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
ifstream fin("fractii.in");
ofstream fout("fractii.out");
int const NMAX=1000000;
bitset<NMAX+5>is_prime;
void ciur(){
is_prime.set();
is_prime[0]=is_prime[1]=0;
for(int i=4;i<=NMAX;i=i+2){
is_prime[i]=0;
}
for(int i=3;i*i<=NMAX;i=i+2){
for(int j=i*i;j<=NMAX;j=j+i){
is_prime[j]=0;
}
}
}
int euler(int n){
int ans=n;
for(int i=2;i*i<=n;i++){
if(is_prime[i]==1 && n%i==0){
while(n%i){
n=n/i;
}
ans-=ans/i;
}
}
if(n>1){
ans-=ans/n;
}
return ans;
}
int main(){
ciur();
int n;
fin>>n;
int s=1;
for(int i=2;i<=n;i++){
s=s+2*euler(i);
}
fout<<s;
}