LOJ 124 除數函式求和 1

2022-03-04 05:57:29 字數 1307 閱讀 2020

題目描述

$\sigma_k(n) = \sum_ d ^ k$​

求 $\sum_^n\sigma_k(i)$的值對 109

取模的結果。

輸入格式

第一行兩個正整數 n,k。

輸出格式

第一行輸出答案。

樣例輸入樣例

5 2

輸出樣例

63

資料範圍與提示

對於 100% 的資料,1≤n,k≤107

​7​​ 。

solution:

本題zyys。。。

直接列舉顯然不行,我們考慮改為求$n$的某一因子$d$在整個函式中的貢獻是多少。

套上數論分塊的思想,乙個因子$d$對式子的貢獻是$\lfloor}\rfloor\times d^k$。

這樣我們需要處理的就是$d^k$,直接$o(n\log k)$快速冪求出每個因子的冪是肯定不行的,因為$n$是$10^7$,直接會t。

那麼還是考慮優化,我們發現,每個數都能唯一分解,而在求冪時會有重複計算的質因子冪。於是,我們考慮線篩,這樣就可以用每個數的最小質因子冪去算它的冪了,那麼整個過程只會對$n\leq 10^7$內的質數進行快速冪,最後複雜度就成了$\sqrt n \log k$,完全可行。

所以最後就只需再$o(n)$掃一遍因子累加貢獻求和就好了。

**:

#include#define il inline

#define ll long long

#define for(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)

#define bor(i,a,b) for(int (i)=(b);(i)>=(a);(i)--)

#define max(a,b) ((a)>(b)?(a):(b))

#define min(a,b) ((a)>(b)?(b):(a))

using

namespace

std;

const

int n=1e7,mod=1e9+7

;int prime[n+5],ans,cnt,n,k,sum[n+5

];bool isprime[n+5

];il

intfast(ll s,ll k)

return

ans;

}il

void

init()

}}int

main()

loj124 除數函式求和 1

loj124 除數函式求和 1 sum n sum d k sum n i k 不能直接數論分塊了,但是一看資料範圍,可以線性篩啊 怎麼篩呢?可以把所有的 i k 篩出來。就是質數直接算,其他的根據 a b k a k b k 在被篩掉的時候遞推出來。1 include2 include3 incl...

LOJ124 除數函式求和 1 線性篩

給定 n le 10 7,k 求 sum n sigma k i 其中 sigma k n sum d k 自然想到交換求和順序,即 sum n sigma k i sum n sum d k sum n frac n i i k 於是,不妨設 f i i k 則我們可以對每個 f i 在 o lo...

1 24學習計畫

1 在我們第乙個課題的基礎上。改寫定時器中斷的內容,做到每隔1s閃爍,再每隔2s閃爍,再隔3s閃爍,然後一直這樣迴圈,其他的led還有示波器都和原來的要求一樣。一遍一遍的對照著led0開始計算led1是不是已經達到了迴圈的要求。1 每隔一秒閃爍 則週期為2 每隔2s閃爍則週期為4 每隔3s閃爍,週期...