C++ 数论算法。段上的大多数除数
我正在寻找一个有效的算法来解决以下问题。设C++ 数论算法。段上的大多数除数,c++,algorithm,numbers,number-theory,C++,Algorithm,Numbers,Number Theory,我正在寻找一个有效的算法来解决以下问题。设d(n)表示n的正因子数,其中n为正整数。我们得到了一些1res)res=r; 如果(i==p)返回; int d; 无符号长x=val; 对于(d=1;d它迭代所有数字,如下所示: num = P1^D1 * P2^D2 * P3^D3 * ... * Ps^Ds constraints: Pi <= 71 1 <= Di <= 100 sequence (Pi) is a sorted list of first s p
d(n)
表示n
的正因子数,其中n
为正整数。我们得到了一些1res)res=r;
如果(i==p)返回;
int d;
无符号长x=val;
对于(d=1;d它迭代所有数字,如下所示:
num = P1^D1 * P2^D2 * P3^D3 * ... * Ps^Ds
constraints:
Pi <= 71
1 <= Di <= 100
sequence (Pi) is a sorted list of first s primes
sequence (Di) is nonincreasing
num <= n
num=P1^D1*P2^D2*P3^D3*..*Ps^Ds
限制条件:
π矛盾。这意味着在寻求最优(最小)数的因式分解中,所有的素数必须恰好是前s个素数。所使用的素数集中不能有洞。
顺便说一句,Di作为@stgatilov答案的补充,我将证明选择将素数限制为小于或等于71的素数
我使用了一个稍微修改过的代码版本来记录最大数的除数。对于10000000000000000或9999999999999999,我得到:
897612484786617600=28*34*52*72*11*13*17*19*23*29*31*37
总除数为103680
这意味着对于所有的18位十进制数字,没有一个大于37的素数是找到最大除数的整数。< /P>请修正代码环境:在代码< MUL>/代码>函数之前加一行空格。你考虑不同的除数还是不?除数需要简单吗?<代码> d(12)例如,我考虑所有除数,所以D(1)=1,D(素数)=2,D(12)=6。