洛谷P3601簽到題(尤拉函式)

2022-05-31 08:42:10 字數 1786 閱讀 6061

這是一道簽到題!

建議做題之前仔細閱讀資料範圍!

我們定義乙個函式:qiandao(x)為小於等於x的數中與x不互質的數的個數。

這題作為簽到題,給出l和r,要求求

。輸入格式:

一行兩個整數,l、r。

輸出格式:

一行乙個整數表示答案。

輸入樣例#1:

233 2333
輸出樣例#1:

1056499

輸入樣例#2:

2333333333 2333666666
輸出樣例#2:

153096296

對於30%的資料,

。對於60%的資料,

。對於100%的資料,

,。qiandao(x)=x-phi(x),轉化為求尤拉函式,而x只可能有乙個大於n^0.5的素因子,所以只要求到n^0.5的素數就行了。還是批量處理尤拉函式的值,否則tle啊。

1

program

rrr(input,output);

2const

3 cs=666623333;4

var5 a:array[0..1000010]of

boolean;

6 f,c:array[0..1000010]of

int64;

7i,j,n:longint;

8l,r,k,ans:int64;

9begin

10 assign(input,'

r.in

');assign(output,'

r.out

');reset(input);rewrite(output);

11readln(l,r);

12 n:=trunc(sqrt(r));

13fillchar(a,sizeof(a),true);

14 k:=l;while k<=r do

begin f[k-l]:=k;c[k-l]:=k;inc(k); end;15

for i:=2

to n do

16if a[i] then

17begin

18 k:=l div i*i;if kthen k:=k+i;

19while k<=r do

20begin

21 f[k-l]:=f[k-l] div i*(i-1

);22

while c[k-l] mod i=0

do c[k-l]:=c[k-l] div

i;23 k:=k+i;

24end

;25 j:=i<<1;while j<=n do

begin a[j]:=false;j:=j+i; end;26

end;

27 k:=l;while k<=r do

begin

if c[k-l]>1

then f[k-l]:=f[k-l] div c[k-l]*(c[k-l]-1);inc(k); end

;28 ans:=0

;29 k:=l;while k<=r do

begin ans:=(ans+k-f[k-l]) mod cs;inc(k); end;30

write(ans);

31close(input);close(output);

32end.

洛谷 P3601 簽到題

題目描述 我們定義乙個函式 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...

洛谷P3601 簽到題

我們定義乙個函式 qiandao x 為小於等於x的數中與x不互質的數的個數。這題作為簽到題,給出l和r,要求求 sum r qiandao i mod 666623333 先線性篩出 1 sim 10 6 的質數,然後計算他們對 l sim r 的數的貢獻即可。注意噹噹 l sim r 的數最後可...

尤拉函式 簽到題

luogu p3601 簽到題 題中我們定義乙個函式 qia ndao x qiandao x qianda o x 為小於等於x的數中與x xx不互質的數的個數讓我們很自然地想到尤拉函式。那就在這裡先介紹一下這個神奇的函式。數論基礎 尤拉函式 學習完之後我們勾回頭來看這道題,題中的 qia nda...