參考部落格
參考部落格
參考部落格
這個講的挺好
預備知識點:
大於1的數n可以分解質因數:
n=p1a1×p2a2×p3a3*…*pka
n的約數的個數是(a1+1) * (a2+1) * (a3+1)…(ak+1)
我們先用線性篩來篩出素數
bool mark[maxn]
;int prim[maxn]
;int cnt;
void
initial()
}}
n的約數的個數是(a1+1) * (a2+1) * (a3+1)…(ak+1)
我們可以用線性篩篩出當前n的約數個數
證明:
d[i]表示i的約數的個數
num[i]表示i的最小素因子的個數
prim[i]表示第i個素數
分下列情況:
i為質數
因為i為質數,所以素因子只有本身,且指數為1
所以num[i]=1,d[i]=2(1和本身)
i%prim[j]!=0
說明i不包含prim[j]這個素因子,但是i*prim[j]包含乙個素因子prim[j],所以
d(i∗prime[j])=(1+r1)∗……∗(1+rk)∗(1+1)=d[i] * d[prim[j]] = d[i] * 2
而且因為我們是從小到大列舉,所以當前的prim[j]必然是i * prim[j]的最小素因子,所以num[i * prim[j]] = 1
i%prim[j]= =0
i中包含prim[j],且為i的最小素因子
d(i∗prime[j])=(1+r1+1)∗……∗(1+rk)
d(i∗prime[j])=d(i)/(num(i)+1)∗(num(i)+2)
num(i∗prime[j])=num(i)+1
#include
#include
#include
using
namespace std;
const
int wx=
1017
;int isprime[wx]
,prime[wx]
,d[wx]
,num[wx]
;int tot,n,m;
inline
intread()
while
(ch>=
'0'&&ch<=
'9')
return sum*f;
}void
euler()
for(
int j=
1;j<=tot&&i*prime[j]
<=n;j++
)else}}
}int
main()
我們用sd(i)表示i的約數和
根據算數基本定理:
sd(n)=(1+p1+p21+……+pr11)∗(1+p2+p22+……+pr22)∗……∗(1+pk+p2k+……+prkk)
最小質因子的那一項是(1+p1+p21+……+pr11)
我們用num[i]來表示最小質因子的那一項
證明:
和上面一樣分類討論:
i為素數
sd(i)=i+1num(i)=i+1
i%prim[j] ! = 0
i∗prime[j]裡原先沒有prime[j]這一項,加上後:
sd(i∗prime[j])=sd(i)∗sd(prime[j])
num(i∗prime[j])=1+prime[j]
(大體思路如上)
i%prim[j] = =0
d(i∗prime[j])=(d(i)/num(i)∗(num(i)∗prime[j])+1
num(i∗prime[j])=num(i)∗prime[j]+1
#include
#include
#include
using
namespace std;
const
int wx=
1017
;inline
intread()
while
(ch>=
'0'&&ch<=
'9')
return sum*f;
}int isprime[wx]
,sd[wx]
,num[wx]
,prime[wx]
;int n,tot;
void
euler()
for(
int j=
1;j<=tot&&prime[j]
*i<=n;j++
)else}}
}int
main()
線性篩2 篩約數個數
根據唯一分解定理 n p 1 p 2 p q 任意質因子的任意次冪都可以隨意組合,所以根據乘法原理 n 的約數個數為 1 k 1 1 k 2 1 k 3 1 k q so,可以根據這個線性篩約數個數 首先設 num i 為 i 的 k 1 也就是最小質因數的指數 d i 為 i 的約數個數 然後根據...
數論 約數個數
這題是個大水題,只不過資料稍微大了點。結果大家都用那啥的模擬。結果哈哈哈哈哈哈。求a b之間每個數的約數個數的總和。input 一行兩個正整數a b,以乙個空格隔開。output 一行乙個整數,即答案。資料範圍 對於50 的資料,1 a b 1000 對於100 的資料,1 a b 10,000,0...
數論雜記 約數個數定理
例題 codeforces 1325e 1.題目解釋每個數的因數個數不超過7個,說明了每個數最多只有2個質因數,因為如果有3個質因數的話,那麼 f n 1 1 3 8 7不成立了。2.求出的答案要使得乘積為完全平方,因此答案的質因數個數必須為偶數個,即a1 a2 要為偶數。3.答案的質因數個數必須為...