Visible Lattice Points
寫這篇博客是因爲上面那個題,人家是歐拉函數,看我這貪心一下午…
定義:歐拉函數是小於x的整數中與x互質的數的個數,一般用φ(x)表示。例如φ(6)=2.特殊的,φ(1)=1。
求法:φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…(1-1/pn),其中p1,p2……pn爲x的所有質因數,x是不爲0的整數.
證明:容斥原理,詳細的過程略…懶得敲了
定義直接求代碼:
int Euler(int x)
{
int ans = x;
for(int j = 2;j<=x/j;j++)
{
if(x%j==0)
{
ans = ans/j*(j - 1);
while(x%j==0)
x/=j;
}
}
if(x>1)ans = ans/x*(x - 1);
return ans;
}
記憶數組+打表
int num[maxn];
void Euler(int a)
{
num[1] = 1;
for(int i = 2;i<=a;i++)
{
if(!num[i])
{
for(int j = i;j<=a;j+=i)
{
if(!num[j])
num[j] = j;
num[j] = num[j]/i*(i-1);
}
}
}
}
當求出歐拉函數時候,歐拉定理也就出來了。
歐拉定理 :
對於互質的正整數 a 和 n ,有 a^φ(n) ≡ 1 ( mod n ),如果n爲質數的話,那麼就成了費馬定理了,既:a^(p - 1) ≡ 1( mod p ) ,還有幾個的性質以及證明,附:大佬博客