WOJ 4240 約數個數

2021-09-02 19:59:28 字數 2423 閱讀 8262

題目描述:

給出整數 x

xx,求它的約數個數

為了加大難度,有 m

mm 次詢問,將每次詢問的答案求和然後模 109

+7

10^9+7

109+7

輸入格式:

第一行是乙個整數 mmm

第二行是整數 q

1q_1

q1​,a

aa,b

bb,ccc

q

1q_1

q1​ 表示第一次詢問的數字

第 i

ii 次詢問 qi=

(qi−

1∗a+

b)%c

q_i=(q_∗a+b)\%c

qi​=(q

i−1​

∗a+b

)%c

輸出格式:

所有詢問的答案之和模 109

+7

10^9+7

109+7

樣例資料:輸入

22 2 1 9 輸出

4 100

%100\%

100%

的資料保證 m≤3

×106

,a,b

,c≤1

07,q

i≥1,

c≥

1m\leq 3\times 10^6, a,b,c\leq10^7,q_i≥1,c≥1

m≤3×10

6,a,

b,c≤

107,

qi​≥

1,c≥

1。看到這道題的資料範圍, q

qq 是 107

10^7

107 級別的,所以應該是 o(n

)o(n)

o(n)

的複雜度

然後打了個暴力,去看正解,發現是用線性篩來篩約數個數,然後就學了一下

首先,新定義兩個陣列 g[i] 和 num[i],g[i] 表示 i

ii 的約數個數,num[i] 表示 i

ii 最小質因數的個數

舉個例子,對於 12,g[12]=6,num[12]=2(因為 12=2*

2*3)

有乙個結論,如果把乙個數分解成 p1a

1⋅p2

a2⋯p

ka

kp_1^\cdot p_2^}\cdots p_^

p1a1​​

⋅p2a

2​​⋯

pkak

​​,那麼乙個數的約數個數應為 ∏i=

1k(a

i+1)

\prod ^_(a_i+1)

∏i=1k​

(ai​

+1)

現在分三種情況討論一下:

1、若 i 為質數,那麼顯然 g[i]=2,num[i]=1

2、若 i 為合數

pp,這個因數為 xxx

(1)若 x

xx 為 p

pp 的倍數,此時 p

pp 就是 i

ii 和 x

xx 的最小質因數,也即若把 x

xx 表示成 (num[x]+1)*k(k

kk 為其他的質因個數 +1 的乘積),i

ii 就可以表示成 (num[x]+2)*k ∴

\therefore

∴ 此時, g[i]=g[x]/(num[x]+1)*(num[x]+2),num[i]=num[x]+1

(2)若 x

xx 不為 p

pp 的倍數,因為 p

pp 是 i

ii 的最小質因數,所以易知 num[i]=1,並且 i

ii 相當於只是在 x

xx 的基礎上多乘了乙個 p

pp,所以 g[i]=g[x]*2

#include

#include

#include

#define n 10000005

#define mod 1000000007

using

namespace std;

int prime[n]

,g[n]

,num[n]

;bool mark[n]

;void

linear_sieves()

for(j=

1;j<=sum&&i*prime[j]

++j)

num[i*prime[j]]=

1;g[i*prime[j]

]=g[i]*2

;}}}

intmain()

printf

("%d"

,ans)

;return0;

}

約數個數 約數之和

給乙個數n,求它的約數個數 因為n可以唯一分解成質因數的乘積即 n p 1 p 2 p t 所以n的約數c的形式應該是 c p 1 p 2 p t 對於任何兩組不同的 beta 1,beta t 的取值,由算數基本定理得c是不同的,由於 beta i 的取值為 0,1,alpha i 共 alpha...

約數個數定理

編輯 對於乙個大於1正整數n可以 分解質因數 則n的 正約數的個數就是 其中a 1 a2 a 3 ak是p 1 p2 p 3,p k的指數。編輯首先同上,n可以 分解質因數 n p1 a1 p2 a2 p3 a3 pk ak,由約數定義可知p1 a1的約數有 p1 0,p1 1,p1 2.p1 a1...

數論 約數個數

這題是個大水題,只不過資料稍微大了點。結果大家都用那啥的模擬。結果哈哈哈哈哈哈。求a b之間每個數的約數個數的總和。input 一行兩個正整數a b,以乙個空格隔開。output 一行乙個整數,即答案。資料範圍 對於50 的資料,1 a b 1000 對於100 的資料,1 a b 10,000,0...