Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 分解大于100位的整数_C++_C_Primes_Largenumber_Decomposition - Fatal编程技术网

C++ 分解大于100位的整数

C++ 分解大于100位的整数,c++,c,primes,largenumber,decomposition,C++,C,Primes,Largenumber,Decomposition,X和Y是大于100位的整数。找到在[X,Y]范围内的整数P,Y[并确保“最佳”素分解(即具有最多唯一素因子的分解) 我所做的只是检查素性,分解范围内的每个数字,找到符合规则的数字。还有其他方法吗 编辑: 在上述示例中,123456分解为 2^6*3^1*643^1,即2*2*2*2*3*643,但只有3个独特因素 而答案123690被分解为6个独特因素 2^1*3^1*5^1*7^1*19^1*31^1有关素数计数的问题的答案总是要找到一种方法,用筛子来解决问题;在你的例子中,你在寻找具有大量

X
Y
是大于100位的整数。找到在[
X
Y
]范围内的整数
P
Y
[并确保“最佳”素分解(即具有最多唯一素因子的分解)

我所做的只是检查素性,分解范围内的每个数字,找到符合规则的数字。还有其他方法吗

编辑: 在上述示例中,123456分解为
2^6*3^1*643^1
,即
2*2*2*2*3*643
,但只有3个独特因素

而答案123690被分解为6个独特因素

2^1*3^1*5^1*7^1*19^1*31^1

有关素数计数的问题的答案总是要找到一种方法,用筛子来解决问题;在你的例子中,你在寻找具有大量因子的“反素数”,但这个原则仍然适用

这个问题的关键是,对于大多数数字,大多数因素是小的。因此,我的建议是建立一个范围x到y的筛子,其中所有的整数都被初始化为零。然后考虑所有的素数小于某个极限,大到方便,但明显小于每个素数的X.,将1个元素添加到每个元素中。筛是素数的倍数。使用所有素数进行筛选后,计数最大的筛子位置对应于X和Y之间具有最明显素数因子的数字

让我们考虑一个例子:取范围100到125,用素数2, 3, 5和7进行筛分。你会得到这样的东西:

100 2 5
101 (101)
102 2 3 (17)
103 (103)
104 2 (13)
105 3 5 7
106 2 (53)
107 (107)
108 2 3
109 (109)
110 2 5 (11)
111 3 (37)
112 2 7
113 (113)
114 2 3 (19)
115 5 (23)
116 2 (29)
117 3 (13)
118 2 (59)
119 7 (17)
120 2 3 5
121 (11)
122 2 (61)
123 3 (41)
124 2 (31)
125 5
因此,获胜者是105和120,每一个都有三个主要因素;你必须自己决定如何处理关系。请注意,有些因素被忽略了:11分110和121,13分104和117,17分102和119,19分114,23分115,29分116,31分124,37分111,41分123,53分106,59参考118、61除以122,当然101、103、107、109和113都是素数。这意味着102、110和114也与前导相等,每一个都有三个素数因子。所以这个算法并不完美,但对于百位数范围内的X和Y,假设你按素数筛选到一百万或一千万,你就不太可能错过答案是


好问题。请尽快查找。

将所有素数的列表按顺序(2,3,5,7…)并开始相乘(2*3*5*…),直到得到一个>=X的数字。将这个数字称为p。如果它在web上搜索“c++大数字库”,因为有很多。X和Y大于100位的目的可能是禁止你计算每一个可能的数字的分解。IMHO,这里有趣的事情是找到一个不需要这种计算的算法。我开始写一个答案,但我找不到精确的算法。我的想法是反过来ly.类似于try
P=2*2*2*……2
。如果它在X和Y之间,你就赢了。否则,试一下
P=2*2*2*……*3
等等。递归地用可能最小的数字尝试所有可能的乘法。这个问题似乎离题了,因为它是关于数论的。这个问题似乎离题了,因为这是关于数论,而不是编程。谁给我投了反对票,请解释为什么?如果我的答案有问题,我想修正它。