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_2^*p_3^*...*p_m^\)
所以\(d(n)=(c_1+1)*(c_2+1)*(c_3+1)*...*(c_m+1)\)
所以\(d(n^k)=(kc_1+1)*(kc_2+1)*(kc_3+1)*...*(kc_m+1)\)
所以就是對\([l,r]\)區間中的每乙個數進行質因數分解,可以通過區間素數篩計算每乙個素數的貢獻
#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define ll long long
#define pii pair#define pll pair#define pli pair#define pi acos(-1.0)
#define eps 1e-6
#define lowbit(x) x&(-x)
using namespace std;
const int maxn=1e6+10,mod=998244353;
int t;
bool is_prime[maxn];
ll l,r,k,ans[maxn],cur[maxn];
void segment_sieve(ll a,ll b)
for(ll j=(a+i-1)/i*i;j<=b;j+=i)
cnt=cnt*k%mod;
ans[j-a]=ans[j-a]*(cnt+1)%mod;
}} }
for(int i=0;i<=b-a;i++) }}
int main()
printf("%lld\n",res);
}}
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 簡單數學 區間素數篩法
題意 給出 l,r,k 求 lambda d i k mod998244353,其中 l i r,d i 為 i 的因子個數 思路 若 x 分解成質因子乘積的形式為 x p1 a1 p2 a2 pn an,那麼 d x a1 1 a2 1 an 1 顯然 d x k a1 k 1 a2 k 1 an...
hdu 6069 素數篩 區間質因數分解
給 l,r 區間的每乙個數都質因數分解的複雜度可以達到 r l logr,真的漲姿勢 另外,質因數分解有很重要的一點,就是只需要打sqrt r 以內的素數表就夠了 因為超過sqrt r 的至多只有乙個,分解其他的那些剩下的就是了。果然學習的過程中要精益求精,把時間和空間都盡量降到最低。此外還有乙個很...