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 繼續你的...