结论:若存在,则必定能整除
证明:设的因子集为,的因子集为,的因子集为。由于题目条件为,因此相当于把中的各个因子与的所有因子相乘,组成新的因子,并且由于和互质,不会出现重复的因子。由组合数易知,即。
由此可证明当时,为积性函数。
进一步推导:
即必定能整除,证明完毕。
由于的值非常大,不能直接表示,考虑对因子下手。注意到,由唯一分解定理可知,一个大于1的正整数,如果它的标准分解式为,那么它的正因子个数,即。
因此,可以维护一个质因子及其指数的集合,每当乘以一个时,再将的质因子分解加入中,即可得到当前的质因子分解式。计算时同理,对每一个的分解式中每一个指数+1进行质因子分解。若能整除,则对于分解式中的任意一个底数,其指数必须大于分解式的指数。
//对n或x质因数分解
void divide(int n)
{
for(int i=2;i*i<=n;i++)
while(n%i==0) mp[i]++,n/=i;
if(n>1) mp[n]++;
}
//检验d(n)能否整除n
bool check()
{
d.clear();
for(auto [l,r]:mp)//对指数质因数分解
{
r++;
for(int i=2;i*i<=r;i++)
while(r%i==0) d[i]++,r/=i;
if(r>1) d[r]++;
}
for(auto [l,r]:d)
if(mp[l]<r) return 0;//若对于同一底数,n中指数小于d中指数,则不能整除
return 1;
}