关闭。这个问题不符合StackOverflowguidelines。它目前不接受答案。这个问题似乎与helpcenter中定义的范围内的编程无关。关闭8年前。ImprovethisquestionX和Y是大于100位的整数。找到[P,X[范围内的整数Y并且保证“最佳”素数分解(即具有最独特素数因子的分解)。我所做的只是检查素数并分解范围内的每个数字,然后找到符合规则的数字。还有其他方法吗?Anexampleonsmallintegers编辑:在上面的例子中,123456被分解为2^6*3^1*643^1,那是2*2*2*2*2*2*3*643但只有3个独特的因素。虽然答案123690被
numbers.txt中有1000个数字,每个数字2到9位,每个数字单独一行。练习是计算有多少个数字满足条件:分解后,这个数字恰好有3个不同的质因数,它们可以出现多次,而且都是偶数。例如105-因素:3、5、7-是,1287-因子:3、3、11、13-是,1157625-因子:3,3,3,5,5,5,7,7,7-是,55-因素:5、11-否。#include#includeusingnamespacestd;intnumber,threefnumbers=0;intmain(){ifstreamfile("numbers.txt");ofstreamoutputf("results.t
我必须找到给定数字N的除数总数,其中可以大到10^14。我尝试计算最大为10^7的素数,然后使用素数的指数找到除数factors.However事实证明它太慢了,因为使用筛子找到素数需要0.03秒。如何在不计算素数的情况下更快地计算除数总数?请伪代码/很好解释的算法将不胜感激。 最佳答案 使用阿特金筛法找出所有小于10^7的素数。(其中有664,579个)http://en.wikipedia.org/wiki/Sieve_of_Atkin理想情况下,这应该在编译时完成。接下来计算质因数分解:intx;//thenumberyouw
我必须补充一点:我调用了线性搜索15000次,每次迭代时我查找的最低范围高达50000。因此意味着在第一次迭代中有15000*50000次查找。这应该需要超过0毫秒的时间。我有这个基本的线性搜索:boollinearSearch(std::vector&primes,intnumber,intrange){for(inti=0;i我花时间使用:voidtimeLinearSearch(std::vector&primes){clock_tstart,stop;size_tNRND=15000;//15000primesperclockfor(intN=50000;N这里的问题是耗时是0
C++中如何通过位运算求素数? 最佳答案 我认为做到这一点的方法是不要像我们通常那样将位集视为其数字表示,而是将其视为数字列表。所以位集1111将代表数字1、2、3和4。现在如果我们说“1”代表素数,“0”代表非素数,我们可以按如下方式制作筛子。将所有位设置为1(我将使用16位表示整数1到16)1111111111111111我知道1不是质数,所以我将它设置为零。0111111111111111现在,我知道我遇到的下一个“1”代表素数,但根据定义,该数的所有倍数都不是素数,所以我不理会下一个“1”,但设置它的所有倍数都为“0”。由于
我对任意大小的数据类型使用GMP(带有MPIR)。我也用了它的素性检验功能,用的是Miller-Rabin方法,但是不准确。这就是我要解决的问题。我能够通过sqrt方法使用蛮力确认数字18446744073709551253是素数。是否有任何方法可以100%准确地检查大数是否为素数?它不应该使用太多的内存/存储空间,几兆字节是可以接受的。应该比我用的sqrt方法快它应该适用于大小至少为64位或更大的数字。最后,它应该是100%准确的,没有可能!我有哪些选择?尽管我可以接受蛮力法(对于64位数字),但出于兴趣,我想要更快更大。此外,64位数字检查速度太慢:总共43秒!
我必须打印表示给定数字的方式的数量,因为它是质数部分。让我澄清一下:假设我得到了这个数字7。现在,首先,我必须找到所有小于7的素数,即2、3和5。现在,有多少个有什么方法可以汇总这些数字(我可以根据需要多次使用一个数字),以便结果等于7?例如,数字7有五种方式:2+2+32+3+22+53+2+25+2我完全迷失了这项任务。首先,我想我会像这样制作一个可用元素数组:{2,2,2,3,3,5}(7/2=3,所以2必须出现三次。3也是如此,它有两个发生)。之后,遍历数组并选择一个“领导者”来确定我们在数组中的距离。我知道解释很糟糕,所以这是代码:#include#includeintpri
#includeusingnamespacestd;voidwhosprime(longlongx){boolimPrime=true;for(inti=1;i我试图找到由Problem3指定的数字600851475143的质因数在ProjectEuler上(它要求最高素数,但我想找到所有素数)。但是,当我尝试运行这个程序时,我没有得到任何结果。它是否与我的程序处理如此大的数字所花费的时间有关,甚至与数字本身有关?另外,有什么更有效的方法可以解决这个问题?对于我在解决问题时如何转向这些更优雅的解决方案,您有什么建议吗?一如既往,谢谢! 最佳答案
随着数据大小增加超过260k,我的CUDA程序停止工作(它不打印任何内容)。有人能告诉我为什么会这样吗?这是我的第一个CUDA程序。如果我想要更大的素数,如何在CUDA上使用大于longlongint的数据类型?显卡为GT425M。#include#include#include#defineSIZE250000#defineBLOCK_NUM96#defineTHREAD_NUM1024intdata[SIZE];__global__staticvoidsieve(int*num,clock_t*time){constinttid=threadIdx.x;constintbid=bl
我需要获取可以轻松达到1k位的大数的所有质因数。这些数字实际上是随机的,所以应该不难。我如何有效地做到这一点?我将C++与GMP库结合使用。编辑:我想你们都误会了我。我所说的质数的意思是得到该数的所有质因数。对不起我的英语,在我的语言中素数和因子是相同的:)澄清(来自OP的其他帖子):我需要的是一种使用C++和GMP(GnuMultiplePrecessionlib)或不太优选的任何其他方式来有效分解(找到数字的质因数)大数(可能达到2048位)的方法。这些数字实际上是随机的,所以它很难因式分解的可能性很小,即使这个数字很难因式分解,我也可以重新掷出这个数字(虽然不能选择)。