对正整数 n,欧拉函数是小于等于 n 的数中与 n 互质的数的个数

 

性质摘要

1.  a,b互质, f(a*b) =f(a)*f(b)

2.   f(x^a) = (x-1)*   f(x^(a-1))

3.    if i%j==0    f(i*j)= f(i) *j

4.    if i%j !=0  f(i*j)=f(i) * (j-1)

 

根号复杂度的求法依据公式 

 

 void sov(int n){
 	int i,ans=n;
 	
 	for(i=2;i*i<=n;i++){
 		if(n%i==0){
 			ans=ans/i*(i-1);
 			while(n%i==0) n/=i;
 		}
 	}
 	if(n>1) ans=ans/n*(n-1);
 	cout<<ans;
 }

 

#include <iostream>
#include<vector>
using namespace std ;


void sov(int n){
   int i,fi=1;
    
   for(i=2;i*i<=n;i++){
       if(n%i==0){
           fi*=i-1;
           n/=i ;
           while(n%i==0) fi*=i, n/=i;
       }
   }
   if(n>1) fi*= n-1;
   cout<<fi; 
}

signed main(){
   sov(1690) ;
}

 

 

线筛求法,依据3,4

const int M=1e6;
 int vis[M+4],P[M+4],cnt;
 int fi[M+4];
 
 void shai(int top){
     cnt=0;
     fi[1]=1;
     for(int i=2;i<=top;i++){
         if(vis[i]==0){
             P[++cnt]=i; 
             fi[i]=i-1;
         }
         for(int j=1;j<=cnt&&i*P[j]<=top;j++){
             vis[i*P[j]]=1;
             if(i%P[j]==0){
                 fi[i*P[j]]=fi[i]*P[j];
                 break;
             }
            else
            fi[i*P[j]]=fi[i]*(P[j]-1);
         }
     }
 }

 

posted on 2023-01-04 11:14  towboat  阅读(26)  评论(0)    收藏  举报