遇到了一個歐拉函數的題,於是就四處搜刮資料,拼湊出這個博客。
1.函數內容
定義:在數論,對正整數n,歐拉函數是小於或等於n的數中與n互質的數的個數,記爲。特別的,。
通式:
2.編程實現
①求
int euler(int n)
{
int t=n, sn=sqrt(n+1);
for(int i=2; i<=sn; ++i)
{
if(n%i==0)
{
t=t/i*(i-1);
while(n%i==0) n/=i;
}
if(n==1) break;
}
if(n>1) t=t/n*(n-1);
return t;
}
②求~
void euler(int n)
{
e[1]=1;
for(int i=2; i<=n; ++i)
{
if(!e[i])///i is a prime
{
for(int j=i; j<=n; j+=i)
{
if(!e[j]) e[j]=j;
e[j]=e[j]/i*(i-1);
}
}
}
return;
}
③線性求1~n的所有素數和~
下面用到的一些公式會在“相關性質”中說明。
void Euler(int n)
{
notprime[1]=true;
e[1]=1;
for(int i=2; i<=n; ++i)
{
if(!notprime[i])
{
prime[pn++]=i;
e[i]=i-1;
}
for(int j=0; j<pn&&prime[j]*1ll*i<=n; ++j)
{
notprime[prime[j]*i]=true;
if(i%prime[j]==0)
{
e[prime[j]*i]=e[i]*prime[j];
break;
}else
{
e[prime[j]*i]=e[i]*(prime[j]-1);
}
}
}
return;
}
以上代碼可用百度百科“歐拉函數”詞條中的歐拉函數表驗證。
3.相關性質
- 歐拉定理:
費馬小定理: - 小於p且與p互質的數之和爲,因爲若x與p互質,則p-x也與p互質
2020.1.31
資料來源:
[1]百度百科“歐拉函數”
[2]數論基礎——歐拉函數.csdn博客