HDU 6069 素數篩 分解質因子

2021-08-04 21:49:00 字數 630 閱讀 6794

給乙個起點為l終點為r的區間,求這個區間內的數的k次方的全部因子有多少個。

設 n=p1^c1*p2^c2...,則d(n^k)=(k*c1+1)(k*c2+1)...,r-l>=1e6

先篩出10^6內的素數,再分解出[l,r]裡面的質因子,大於1e6的質數直接為(k+1)個因子。

#include using namespace std;

#define inf 0x3f3f3f3f

#define pi acos(-1.0)

typedef long long ll;

const int maxn=1e6+10;

const ll mod=998244353;

ll vis[maxn],p[maxn],a[maxn],num[maxn],ans;

ll l,r,k;

void solve(int pp)

}}int main()

for(int i=0;i<=n;i++)

for(int i=0;i<=n;i++)

ans=(ans+num[i])%mod;

printf("%lld\n",ans);

}return 0;

}

HDU 6069 素數篩法

思路 設 n p 1 p 2 p m n p 1 c 1 p 2 c 2 p m c m 則d n k kc 1 1 kc 2 1 kc m 1 d n c 1 1 c2 1 c m 1 則 d n k kc 1 1 kc 2 1 kc m 1 d n k kc 1 1 kc 2 1 k c m 1...

HDU6069(思維 素數定理)

比賽的時候有想到一次找所有數的乙個共同因數,結果沒有考慮素數的情況,想歪了,成了莫比烏斯反演。素數定理 任意乙個數都可以表示為n pa11 pa22 pak k n的所有因子個數為 a 1 1 a2 1 ak 1 然後對與每個在範圍內的質數,都進行一次遍歷,看是不是l r中某些數的因子。明白了同時對...

hdu6069 區間素數篩

hdu6069 counting divisors 傳送門題意 計算 sum d i k mod 998244353 其中 d n 表示 n 的約數個數,其中 1 leq l leq r leq 1e12,r l leq 1e6,1 leq k leq 1e7 題解 根據唯一分解定理 n p 1 p...