1 #include<bits/stdc++.h> 2 #define ll long long 3 #define scan(i) scanf("%d",&i) 4 #define scand(i) scanf("%lf",&i) 5 #define scanl(i) scanf("%lld",&i) 6 #define f(i,a,b) for(int i=a;i<=b;i++) 7 #define pb(i) push_back(i) 8 #define ppb pop_back() 9 #define pf printf 10 #define dbg(args...) cout<<#args<<" : "<<args<<endl; 11 using namespace std; 12 #define Max 100001 13 int euler[Max]; 14 void init(){ 15 euler[1]=1; 16 for(int i=2;i<Max;i++) 17 euler[i]=i; 18 for(int i=2;i<Max;i++) 19 if(euler[i]==i) 20 for(int j=i;j<Max;j+=i) 21 euler[j]=euler[j]/i*(i-1);//先进行除法是为了防止中间数据的溢出 22 } 23 //用通式算的 24 int Euler(int n){ //返回euler(n) 25 int res=n,a=n; 26 for(int i=2;i*i<=a;i++){ 27 if(a%i==0){ 28 res=res/i*(i-1);//先进行除法是为了防止中间数据的溢出 29 while(a%i==0) a/=i; 30 } 31 } 32 if(a>1) res=res/a*(a-1); 33 return res; 34 } 35 int eulercal(int n){ 36 int ret=n; 37 for(int i=2;i<=sqrt(n);i++) 38 if(n%i==0){ 39 ret=ret/i*(i-1);//先进行除法防止溢出(ret=ret*(1-1/p(i))) 40 while(n%i==0) n/=i; 41 } 42 if(n>1) ret=ret/n*(n-1); 43 return ret; 44 } 45 int main() 46 { init(); 47 int a; 48 ll ans=0; 49 scan(a); 50 f(i,2,a){ 51 ans+=euler[i]; 52 } 53 pf("%lld",ans); 54 }