對於[l , r]內的每個數,根據唯一分解定理有
所以有
因為//可根據唯一分解定理推導
所以題目要求
就可以運用它到上述公式
(注意不能暴力對l,r內的數乙個個分解算貢獻,而應該列舉l,r區間內質數的倍數):
/*hdu6069[素數篩法] 2017多校3
*/#include
using
namespace
std;
typedef
long
long
ll;ll l, r, k;
const ll mod =998244353ll;
int t, n, prime[1100000
], primesize;
bool isprime[11000000
];void getlist(int
listsize)
}}ll num[
1000005], ans[1000005
];void
solve()
//不能列舉l到r之間的元素進行暴力質因數分解, 會超時; 所以我們可以通過列舉質數的倍數來優化。
for (int i = 1; (ll)prime[i]*prime[i] <= r; i++)
ans[j - l] = (ans[j - l] * (1ll + cnt * k)) %mod;}}
ll res = 0
;
for (int i = 0; i < n; i++)
res = (res + ans[i]) %mod;
}printf(
"%lld\n
", res);
}int
main()
return0;
}
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 區間素數篩
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...
HDU6069 篩法 有新技巧
題目鏈結 解題思路 這道題是這是暑假集訓我debug時間最長的一道題,從昨天下午到今天中午。剛開始的時候直接列舉的l r之間的所有數的質因數,然後就tle了,後來我就看了一下題解,發現了一種優化方法,暴力的做法是把l r每個數的質因數都找一遍,這樣比如l r是1 8,4找過質因數2,6也找過質因數2...