对于任意输入的正整数n,请编程求出具有n个不同因子的最小正整数m。例如:n=4,则m=6,因为6有4个不同整数因子1,2,3,6;而且是最小的有4个因子的整数。
1): n=p1^c1*p2^c2*...*pk^ck的因子个数是(1+c1)*(1+c2)*...*(1+ck).
2): 若具有n个因子的最小自然数是m=p1^c1*p2^c2*...*pi^ci,那么我们有:
a): c1>=c2>=c3>=...>=ci;
b): p1,p2,p3,...,pi是从2开始的连续素数;
c): (1+c1)*(1+c2)*...*(1+ci)=n.
上面的a)和b)是解决这个问题的关键,证明不难,你自己可以证明.
于是,剩下的问题只是分解n,然后,分配指数,对每种分配方案计算得到的结果,从中找到最小的就行了,当然这个可以用回溯法来做,中间可以加一些剪枝.
“”恰好有N个因子的最小正整数M“”
“” u014046022 82424685“”
有了上面的定理之后,要求解m,转化为求解 n=f(x) 即 求解n=(a1+1)(a2+1)⋯(ak+1) 使得 p1^a1⋅p2^a2⋯pk^ak最小。这里显然以越大的质数为底的指数应该尽可能的小,也就是指数应该满足ai≥ai+1ai≥ai+1, 于是我们就可以通过搜索来求解这个问题了。
其中a1>= a2>=a3...>=ak
p1=2,p2=3,p3=5,p4=7 质数序列。