洛谷 P3601 簽到題

2021-10-24 07:26:44 字數 1736 閱讀 8761

題目描述

我們定義乙個函式: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...