草庐IT

c++ - 如何编写一个快速函数来计算一个数的总除数?

我必须找到给定数字N的除数总数,其中可以大到10^14。我尝试计算最大为10^7的素数,然后使用素数的指数找到除数factors.However事实证明它太慢了,因为使用筛子找到素数需要0.03秒。如何在不计算素数的情况下更快地计算除数总数?请伪代码/很好解释的算法将不胜感激。 最佳答案 使用阿特金筛法找出所有小于10^7的素数。(其中有664,579个)http://en.wikipedia.org/wiki/Sieve_of_Atkin理想情况下,这应该在编译时完成。接下来计算质因数分解:intx;//thenumberyouw

c++ - 保持数字不小于零的数学运算

在编程中,模数有助于将数字保持在不超过上限的范围内。例如:intvalue=0;for(intx=0;x输出:012345670123456701234567...现在考虑这种情况:intvalue=5;for(intx=0;x输出:543210-1-2-3-4-5-6-7...我的问题是:如何使用任何条件语句(如if或switchcase)将下限设置为0WITHOUT?我想要的输出:543210000000... 最佳答案 std::max怎么样?intvalue=5;for(intx=0;x

c++ - C++ 中 double 和 DOUBLE 的区别

我想知道double之间有什么区别?和DOUBLE(来自#include)在C++中。在Java中有很多关于它的问题,但那是一种完全不同的语言。是DOUBLE只是double的Windows包装类,或者是其他东西?它们有什么不同的优势吗? 最佳答案 double是C++关键字,而DOUBLE是实现定义的typedef。例如,如果我将包含在MSVC++的项目中,IDE显示DOUBLE在WTypesbase.h中定义喜欢:typedefdoubleDOUBLE; 关于c++-C++中doub

c++ - 编写 GUI 来显示统计信息

我正在为一个项目使用硬件模拟器。它以非常结构化但丑陋的方式在最后输出统计数据。阅读起来可能很累,所以我想写一个GUI来帮助我更好地显示它。有人知道我可以使用什么框架和小部件来快速、轻松地构建干净的东西吗?我希望能够导航树的子节点并隐藏(折叠)我不感兴趣的节点。统计输出采用这样的形式root{foo="bar";foo_num=1;machine{core0{fetch{renamed{none=13559;flags=3013;reg_and_flags=10735;reg=8430;}width[5]={Minimum:381Maximum:17450Average:1.248Tot

c++ - GNU C 库中 PRNG 的周期是多少?

是否有任何关于gcc的g++中随机数生成器的周期性的文献(如果我们不重新设置函数的种子)?我想我可以自己进行测试,但最好能获得经过充分验证的研究。预先感谢您的帮助。//编辑我只是想补充一点,我已经用多个引擎进行了相当多的搜索,但没有找到任何具体的内容。我只阅读了关于周期性受表示种子所需位数限制的一般性评论。(所以我想考虑到srand通常随时间调用,周期性不会超过10^12左右。但在我开始实现我的算法之前,更明确的东西会非常有帮助。) 最佳答案 在rand(3)手册页中搜索时,我发现了这个:Theversionsofrand()and

c++ - 逗号在数字中的含义

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:C++CommaOperator这可能是一个微不足道的问题,但我不知道答案。今天下午这一直困扰着我。我只是在写一个将RVB转换为YUV的函数。没什么特别的,但在我的数字中错误地使用了逗号(,)而不是点。它编译但结果不是我预期的,例如“-3713796”而不是0-255范围数字。(0,615*(double)61)-(0,51498*(double)61)-(0,10001*(double)61)那是什么意思呢?如果这不是编译错误,它可能对某些东西有用,但是什么?Ps:我在Qt中使用C++。

c++ - 这个乘除函数正确吗?

我试图在某些计算中避免longlong和整数溢出,所以我想出了下面的函数来计算(a*b)/c(由于截断整数除法,顺序很重要)。unsignedmuldiv(unsigneda,unsignedb,unsignedc){returna*(b/c)+(a*(b%c))/c;}是否存在无法按预期工作的极端情况? 最佳答案 已编辑:这对于原始明显逻辑正确的值超集是正确的。如果c>b并且可能在其他条件下,它仍然不会给您带来任何好处。也许您对c的值有所了解,但这可能没有您预期的那么有用。a、b、c的一些组合仍然会溢出。编辑:假设您出于严格的C+

C# 指针与 C++ 指针

我一直在学习编程,我选择了C++和C#编程作为第一语言。更具体地说,我有一本旧的C书,有人好心借给我,我正在用它来学习C#。我使用VisualStudioExpress并用C++和C#编写。我感兴趣的一个领域是直接内存管理的能力。我正在尝试学习使用它来优化我的代码。但是,我正在努力正确地做到这一点,并且实际上看到了任何真正的性能改进。例如,以下是C#中的代码:unsafestaticvoidMain(string[]args){intsize=300000;char[]numbers=newchar[size];for(inti=0;i无论我调用三种方法中的哪一种,我都获得相同的执行速

c++ - 我的范围循环出现逻辑错误

我正在作为初学者学习C++(我2个月前开始学习),我的简单代码有问题。我试图将此vector中每个元素的值设置为0,但我不明白为什么它不起作用:vectornumbers={1,2,3,4,5,6,7,8,9,10};for(intx:numbers)x=0;我知道我听起来可能很愚蠢,但我是初学者。如果我尝试用传统的for循环做同样的事情,它会起作用,为什么? 最佳答案 它不会更改数组中的值,因为在每次迭代中,数组中的值都会分配给x,而您更改的是x而不是数组中的值。基本上,基于范围的循环类似于下面的普通for循环:for(inti=

c++ - C/C++大数计算

我正在尝试在C程序中计算以下数字:result=(3*pow(2,500000000)-2)%10000000002的幂太大而无法正确处理=>我的印象是我可以使用模数将计算分成许多步骤以减小结果大小。有人有这样做的策略吗?还有其他想法吗?提前致谢手册 最佳答案 最简单的方法是通过重复平方减去每一步中的模数来取幂。unsignedlonglongmod_pow(unsignedlonglongbase,unsignedlonglongexponent,unsignedlonglongmodulus){if(exponent==0)re