HDU 6069 素數篩法

2021-08-04 22:21:15 字數 1283 閱讀 4759

思路:設

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)。

先打出一百萬以內的素數表,列舉每乙個素數p,然後再列舉[l, r]區間內p的倍數,將其因式分解,那麼因式分解完了之後,區間內的數要麼是1,要麼是乙個超過一百萬的素數。

這個題姿勢一定要對,不能列舉[l,r]內的數,再去分解因式,這樣很容易會超時。

#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

const int inf = 0x3f3f3f3f;

const int maxn = 1e6 + 20;

const double eps = 1e-5;

const int mod = 998244353;

typedef unsigned long long ull;

typedef long long ll;

int dx = ;

int dy = ;

ll n;

int prime[maxn];

int vis[maxn];

ll g[maxn], f[maxn];

int tot;

void init()

}}ll l ,r;

int k;

void cal(int x)

}}int main()

ll ans = 0;

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

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

}}/*

*/

hdu6069 素數篩法 2017多校4

對於 l r 內的每個數,根據唯一分解定理有 所以有 因為 可根據唯一分解定理推導 所以題目要求 就可以運用它到上述公式 注意不能暴力對l,r內的數乙個個分解算貢獻,而應該列舉l,r區間內質數的倍數 hdu6069 素數篩法 2017多校3 include using namespace std t...

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...