luogu:p3601 簽到題
題中我們定義乙個函式:qia
ndao
(x
)qiandao(x)
qianda
o(x)
為小於等於x的數中與x
xx不互質的數的個數讓我們很自然地想到尤拉函式。那就在這裡先介紹一下這個神奇的函式。
數論基礎——尤拉函式
學習完之後我們勾回頭來看這道題,題中的 qia
ndao
(x
)qiandao(x)
qianda
o(x)
其實就是求
( ph
i(x)
(phi(x)
(phi(x
)表示x的尤拉函式)))∑
i=lr
(i−p
hi(i
))
\sum_^ ( i-phi(i) )
i=l∑r
(i−p
hi(i
))我們定睛一看發現這道題的資料有點大,但兩端點之間的區間相對較小,於是考慮對區間進行處理並掃瞄統計即可。先篩出106
10^10
6中所有的質數,然後對[l,
r]
[l,r]
[l,r
]區間進行處理。
具體**見下
#include
#include
#include
#include
#include
#define rg register
#define ll long long
using
namespace std;
const
int p=
666623333
;const
int maxn=
1000001
;ll prime[maxn]
;int isprime[maxn]
;ll l,r,cnt,ans;
ll phi[maxn]
;ll n[maxn]
;void
iprime()
}}void
getphi()
} i++;}
}int
main()
getphi()
;for
(rg ll i=
0;i<=r-l;
++i)
ans=
(ans+
(i+l-phi[i]
)%p)
%p;}
printf
("%lld\n"
,ans)
;return0;
}
1.
1.1.
資料太大想辦法處理,如本題可轉化成區間長度掃瞄。
2.
2.2.
學習理解尤拉函式,要掌握一些常用的板子。
3.
3.3.
要學會對資料範圍進行分析,根據不同的資料範圍選擇不同的演算法。
洛谷P3601簽到題(尤拉函式)
這是一道簽到題!建議做題之前仔細閱讀資料範圍!我們定義乙個函式 qiandao x 為小於等於x的數中與x不互質的數的個數。這題作為簽到題,給出l和r,要求求 輸入格式 一行兩個整數,l r。輸出格式 一行乙個整數表示答案。輸入樣例 1 233 2333輸出樣例 1 1056499 輸入樣例 2 2...
尤拉函式 尤拉定理
尤拉函式 對正整數 n,尤拉函式 是小於等於 n的數中與 n互質的數的數目 此函式以其首名研究者尤拉命名 euler so totientfunction 它又稱為 euler stotient function 函式 尤拉商數等。例如 8 4,因為 1,3,5,7均和8 互質。注 n為1時尤拉函式...
尤拉函式 尤拉定理
尤拉函式 設 n 為正整數,則 1,2,n 中與 n 互素的整數的個數計作 n 叫做尤拉函式。設 p 是素數,p p 1設 p 是素數,pa pa p a 1 設 p,q 是不同的素數,n q p,n p q 即 n p 1 q 1 設 m,n 是兩個正整數,且 m,n 1,若 n m n,n m ...