分解質因子

2021-08-07 05:55:08 字數 1825 閱讀 8446

in mathematics, the function d(n) denotes the number of divisors of positive integer n.

for example, d(12)=6 because 1,2,3,4,6,12 are all 12』s divisors.

in this problem, given l,r and k, your task is to calculate the following thing :

(d((l)^k)+d(l+1)^k)+......+d(r^k)) mod 998244353
input

the first line of the input contains an integer t(1≤t≤15), denoting the number of test cases.

in each test case, there are 3 integers l,r,k(1≤l≤r≤10^12, r−l≤10^6, 1≤k≤10^7)

output

for each test case, print a single line containing an integer, denoting the answer.

sample input

3 1 5 1

1 10 2

1 100 3

sample output

10 48

2302

題意:求 l^k 到 r^k 的各因子的總和 。

分析, 根據素數定理,任意數都能由質數來表示,x=p1^c1*p2^c2…….*pi^ci

其中,p1到pi是不相等的質數,那麼x的因子個數為

num=(c1+1)(c2+1)…….(ci+1);

那麼,相應的 x^k的因子個數為

num=(c1*k+1)*(c2*k+1)……(ci*k+1);

同時,我們在求質因子時,只需要在根號x前找,x至多只有乙個大於根號x 的因子。

列舉根號 r 內的質數 i ,在區間 [l,r] 尋找含有 i 的數(巧妙之處,因為 l 到 r 是連續的,故增加 i 的倍數 即下乙個含有 i 的數)。

隨後考慮每個數在 根號 x 以外的質因子,若有,則統計這部分。

累加該區間內所有數的統計結果即為最終答案。

#include

#include

#include

#include

using

namespace

std;

typedef __int64 ll;

const

int maxn = 1e6+10;

const

int mod = 998244353;

ll prime[maxn],tot;

bool visit[maxn];

ll l,r,k;

ll num[maxn],sum[maxn];

void getprime()

}}void solve()

for(int i=0; prime[i]*prime[i]<=r; i++)

for(ll j=(l/prime[i]+(l%prime[i]?1:0))*prime[i]; j<=r; j+=prime[i])

if(j>=l)

sum[j-l]=sum[j-l]*(res*k+1)%mod;

}ll ans=0;

for(int i=0; i<=r-l; i++)

cout

}return

0;}

質分解因數 質因子分解

3 參考 分解因數 時間限制 1000 ms 記憶體限制 32768 kb 長度限制 100 kb 判斷程式 standard 來自 小小 題目描述 所謂因子分解,就是把給定的正整數a,分解成若干個素數的乘積,即 a a1 a2 a3 an,並且 1 a1 a2 a3 an。其中a1 a2 an均為...

質因子分解

今天沒事做,我們來寫個部落格,混混等級!我們以求數的質因子的個數為例來講解。對於質因子分解最簡單最純粹的暴力我相信大家都會的。int getnum int x return ans 但是當處理的資料比較多,而且範圍也比較大的時候顯然這種方式就不再那麼適合了。既然我們是分解質因子,那麼我們就可以先預處...

質因子分解

這個東西會在程式執行結尾提示 press any key to continue 用以結束程式。貴在那裡?讓我們來看看system pause 的流程 1 暫停你的程式 2 在sub process中啟動os 3 尋找要執行的命令並為之分配記憶體 4 等待輸入 5 記憶體 6 結束os 7 繼續你的...