小编Cha*_*haz的帖子

查找Magic Numbers C++

魔术数字

正整数是"魔法",当且仅当它可以通过将其重复除以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)

c++ magic-numbers

8
推荐指数
1
解决办法
2348
查看次数

标签 统计

c++ ×1

magic-numbers ×1