魔术数字
正整数是"魔法",当且仅当它可以通过将其重复除以2(如果它是偶数或乘以3然后如果它是奇数则加1)来减少到1.因此,例如,3是神奇的,因为3首先减少到10(3*3 + 1),然后减少到5(10/2),然后减少到16(5*3 + 1),然后减少到8(16/2) ,然后到4(8/2),然后到2(4/2),最后到1(2/2).幻数假设表明所有正整数都是魔术,或者形式上:∀x∈Z,MAGIC(x)其中MAGIC(x)是谓词"x是魔法".
我们应该开发一个C++程序来查找1到50亿的"Magic Numbers".如果正确完成,则需要80秒或更短时间.我的大约需要2个小时,我们给出的示例程序需要14天.这是我的代码,我该怎么做才能加快速度?我错过了明显的优化问题吗?
#include <iostream>
using namespace std;
bool checkMagic(unsigned long number);
int main()
{
for(unsigned long i = 1; i <= 5000000000; i++)
{
if(i % 1000000 == 0)
{
//only print out every 1000000 numbers to keep track, but slow it down
//by printing out every single number
cout<<i<<endl;
}
if(!checkMagic(i))
{
//not magic
cout<<i<<" not a magic number"<<endl;
break;
}
}
}
bool checkMagic(unsigned long number)
{
if(number % 2 == …Run Code Online (Sandbox Code Playgroud)