Pagini recente » Borderou de evaluare (job #2023622) | Borderou de evaluare (job #751012) | Cod sursa (job #2985157) | Borderou de evaluare (job #2280279) | Cod sursa (job #2349908)
#include <bits/stdc++.h>
#define NMAX 1010
#define ll long long
using namespace std;
bool E[NMAX];
vector <int> P;
int f(int b){
//Calculam factorii primi ai lui b
vector <int> Dc;
Dc.clear();
int s=b,i=0;
while(b>1){
if(b%P[i]==0){
Dc.push_back(P[i]);
while(b%P[i]==0)b/=P[i];
}
if(b>1 && P[i]>sqrt(b)){
Dc.push_back(b);
b=1;
}
i++;
}
b=s;
//Calculam nr de elemente neprime si il scadem din a
int l=Dc.size();
for(int i=1;i<(1<<l);i++){
int c=0;
int fact=1;
for(int j=0;j<l;j++){
if((1<<j)&i){
fact*=Dc[j];
c++;
}
}
if(c%2)s-=b/fact;
else s+=b/fact;
}
return s*2;
}
int main(){
ifstream cin("fractii.in");
ofstream cout("fractii.out");
int n;
cin>>n;
for(int i=2;i<=n;i++){
if(!E[i]){
P.push_back(i);
for(int j=i*i;j>0 && j<=n;j+=i){
E[i]=1;
}
}
}
ll s=1;
for(int i=2;i<=n;i++){
s+=f(i);//Calculeaza nr de numere prime cu i pana la n
}
cout<<s;
return 0;
}