0%

ABC-400-E - Ringo's Favorite Numbers 3

思路讲解

ABC-383-D - 9 Divisors 

其实这个约数个数定理是显然的

你想p1的指数有0e10~e_1也就是e1+1e_1+1种选择,同理,每种都有ek+1e_k+1种选择

那么根据乘法原理,约束个数也就是 d(n)=(e1+1)(e2+1)(ek+1)d(n)=(e_1+1)(e_2+1)…(e_k+1)

当然喽,只有素因子可以这么玩,非素因子这么玩可能会有重复


当然这道题目关键点不在上面。

N=p1e1p2e2N=p_1^{e_1}p_2^{e_2} 由题意可得,e1为偶数,e2也为偶数。所以其实400数要求是完全平方数,而且是只由两个素因子构成。那么其实也就是要求平方数由两个素因子组成。

哈哈,其实这种也是有点套路,一般来说这种都是直接枚举素因子的

我们用埃氏筛筛出所有1e6以内的素数,存储在primes中。然后就枚举就完了。

AC代码

心路历程(WA,TLE,MLE……)

这个ll是非常需要的,写成int以后就TLE了,可能是因为溢出了。

1
2
3
4
5
6
7
8
9
10
11
12
13
for(int i=0;i<primes.size();++i){
ll p=primes[i];
for(ll j=p;j<=MAXN-10;j*=p){
for(int k=i+1;k<primes.size();++k){
ll pk=primes[k];
if(pk*j>MAXN-10) break;
for(ll p_k=pk;p_k<=MAXN-10;p_k*=pk){
if(p_k*j>MAXN-10) break;
fitNum.pb(p_k*j);
}
}
}
}