題目描述
我們定義乙個函式:qiandao(x)為小於等於x的數中與x不互質的數的個數。
這題作為簽到題,給出l和r,要求求∑i=
lrqi
anda
o(i)
mo
d666623333
\sum_^r qiandao(i) mod 666623333
∑i=lr
qian
dao(
i)mo
d666
6233
33.輸入格式
一行兩個整數,l、r。
輸出格式
一行乙個整數表示答案。
輸入輸出樣例
輸入 #1
233
2333
輸出 #1
1056499
說明/提示
對於100%的資料,1≤l
≤r≤1
012,r
−l≤1
06
1\leq l\leq r\leq 10^,r-l\leq 10^6
1≤l≤r≤
1012
,r−l
≤106
.這題一看就是要求l到r範圍內所有x,與x不互質且小於等於x的數個數。一看資料範圍,l和r是1012
10^10
12範圍,暴力不太行,但r-l的範圍卻是可觀的。考慮用陣列phi[i]儲存與l+i互質且小於等於i的元素個數。最關鍵的是尤拉函式的公式別忘記了:
φ (x
)=x∏
i=1n
(1−1
pi
)\varphi(x)=x\prod_^n(1-\frac)
φ(x)=x
i=1∏
n(1
−pi
1)其中p1,
p2,⋯
,p
np_1,p_2,\cdots,p_n
p1,p2
,⋯,
pn為x所有質因數。那麼接下來就需要求l到r範圍內數的所有質因數,乙個個遍歷不太好,比較好的辦法是先預處理出來106
10^6
106範圍內的素數(基礎的線性篩),然後遍歷這些素數,將i的phi初始化為i,如果i含有這個素因子就減小。**如下:
#include
using
namespace std;
long l,r,now=
1,res=
0,mod=
666623333
;long isprime[
1000010
],primes[
1000010];
long phi[
1000010
],remain[
1000010];
void
build()
for(
int j=
1;j*i<=
1e6;j++)}
}int
main()
for(
long i=
1;i*primes[i]
<=r;i++)}
for(
long i=l;i<=r;i++
) res=
(res+i-phi[i-l]
)%mod;
} cout
}
洛谷P3601 簽到題
我們定義乙個函式 qiandao x 為小於等於x的數中與x不互質的數的個數。這題作為簽到題,給出l和r,要求求 sum r qiandao i mod 666623333 先線性篩出 1 sim 10 6 的質數,然後計算他們對 l sim r 的數的貢獻即可。注意噹噹 l sim r 的數最後可...
洛谷P3601簽到題(尤拉函式)
這是一道簽到題!建議做題之前仔細閱讀資料範圍!我們定義乙個函式 qiandao x 為小於等於x的數中與x不互質的數的個數。這題作為簽到題,給出l和r,要求求 輸入格式 一行兩個整數,l r。輸出格式 一行乙個整數表示答案。輸入樣例 1 233 2333輸出樣例 1 1056499 輸入樣例 2 2...
洛谷簽到題
題目描述 一天 cyx 閒得無聊,寫下了 nn 個數,每個數隻會是 11 或 22,每個數是 11 的概率和是 22 的概率都是 50 50 現在 cyx 想知道他寫的這 nn 個數的和,可他寫的數太多了,他根本算不了,所以他就想知道總和的期望值。你能告訴他麼?輸入格式 乙個整數 nn,表示 cyx...