NOIP提高組模擬 快速荷葉葉變換

2021-07-22 10:56:28 字數 1423 閱讀 7012

我們可以把式子進行拆分,變成∑n

i=1(

nmodi)

∗∑mj

=1(m

modj

) ,也就是前一半和後一半可以分開計算。假設計算∑n

i=1(

nmodi)

,列舉出所有情況,發現可以進一步推出公式n2

−∑mi

=1⌊n

/i⌋∗

i ,再推導,發現了對於某乙個i來說,若是

nmodi≠

0 ,那麼

nmod(i

+1) 一定等於

nmodi+

1 ,直到

nmodi=

0 ,所以可以用乙個指標來表示當前的i是多少,每一次當

nmodi≠

0 時就用等差數列來求出一段數的結果,並把i相應後跳。

const mo=1000000007;

var n,m,i,j:longint;

ans1,ans2,tot,sum,maxn,s1,s2:int64;

function

ksc(x,y:int64)

:int64;

var sum:int64;

begin

sum:=sqr(trunc(sqrt(x)));

ksc:=sum mod mo;

ksc:=(ksc*y)mod mo;

ksc:=(ksc+(x-sum)*y)mod mo;

exit(ksc);

end;

function

doit

(x:longint)

:int64;

begin

doit:=ksc(x,x);

i:=1;

while i<=x do

begin

sum:=x div i;

maxn:=x div sum;

s1:=i+maxn;s2:=maxn-i+1;

if s1 mod 2=0 then s1:=s1 div 2

else s2:=s2 div 2;

tot:=ksc(ksc(s1,s2),sum);

doit:=doit-tot;

while doit<0

do doit:=doit+mo;

i:=maxn+1;

end;

end;

begin

readln(n,m);

ans1:=doit(n);

ans2:=doit(m);

writeln(ksc(ans1,ans2));

end.

NOIP提高組 20151029模擬

其實這套題目並不算太難,但是還是發揮不了100 水平。第一題直接線性篩法,求出質數,然後就可以判斷乙個數是否為質數了。這道題還可以用miller rabin去求,後者的速度較快,如果資料再大些,就要使用後者了。第二題,比賽時發現了,當n 7時,答案會每四個一迴圈,但是就沒有繼續往下想,其實想下去會想...

NOIP提高組模擬 Value

相信大家一看到這道題就想起最經典的揹包問題,於是毫無疑問就往dp方向想。於是我們設出狀態轉移方程,設f i j k 為我要拿i個物品,已經選了j個,現在第j個我選了k的最大價值,那麼f i j k max,其中l為第j 1次選擇的物品。但很快我們發現,你這樣做是不行的,因為我們還要解決順序問題,選擇...

NOIP提高組模擬 幻象

phantom是一位愛思考的哲 學家。最近phantom得到了森 妖精的真傳。在他練功的時候,每秒他的思緒中都有一定的概率浮現出奇 異的幻象,持續x秒的幻象將產生x 2 的幻象值。phantom練功發自真心,他想知道,在n秒內他期望產生的幻象值是多少。因為持續x秒的幻象將產生x2 的幻象值,所以設乙...