【问题标题】:Homework help: prime numbers作业帮助:素数
【发布时间】:2013-10-06 16:32:44
【问题描述】:

我正在尝试创建一个 bool Isprime 函数,该函数创建一个覆盖用户输入整数的素数列表,然后线性搜索该列表,如果输入整数在该列表中,则返回 true。但是,我遇到了一个问题,要弄清楚如何制作涵盖输入整数的列表(即,如果用户输入 4,则列表必须有 2、3 和 5)。

这是我到目前为止的代码(我知道这是完全错误的,我已经尝试过研究,但我就是不知道该怎么做。

bool Isprime(int N){
  int i,tprime=3;
  list<int>prime;
  prime.push_back(2);
  list<int>::iterator it;
    for (it=prime.begin();it!=prime.end();it++){
      if (*it<N){
        while (i<sqrt(tprime)){
          if(N%i!=0){
            if(i<sqrt(tprime))
              i++;
            else prime.push_back(tprime);
          }
        tprime++;
        }
      }
    }
  for (it=prime.begin();it!=prime.end();it++){
    if (*it==N)
      return true;
  }
  return false;
}

你们能给我一些关于如何完成这项工作的提示吗?我可以弄清楚线性搜索。

【问题讨论】:

  • 您有语法错误。显示您的真实代码。
  • “创建一个覆盖用户输入整数的素数列表”
  • @not-rightfold 这是我拥有的代码,除了线性搜索。什么是语法错误?
  • @Hippo,例如,如果用户输入 8,则列表必须包含 2、3、5、7 和 11。列表必须包含不超过等于或大于输入整数。
  • @JakeHafendorfer 你在&lt;int&gt; 和iterator 之间缺少::。

标签: c++ list primes


【解决方案1】:

你有一个已知素数的列表,你可以用它来检查每个单独的数字,看看它是否是素数。现在你尝试在外层迭代这个列表。这似乎不太对。

这是一种解决方法(与您尝试做的相匹配):

  1. 从 3 数到您要查找的数字。
  2. 确定您需要检查的最大质数(即数字的平方根)
  3. 对于每个数字,通过确定将其除以已知素数列表的每个元素直至您需要检查的最大值的提醒来检查它是否是素数。
  4. 如果数字是素数,则将其添加到已知素数列表中。

【讨论】:

  • 我需要检查的最大素数必须等于或大于输入整数,而不是平方根。如何在不遍历列表的情况下实现这一点?
  • 我的观点是,一旦遇到大于当前检查值平方根的素数,当检查特定数字时,您可以停止处理已知素数列表中的素数。由于计算平方根是一项相当昂贵的操作,因此您希望对每个要检查是否为素数的数字执行一次。关于你的问题:我想我给了你相当准确的指示。你的意思是我写代码?好吧,你看,我不再需要这些练习了。
猜你喜欢
  • 2011-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-18
  • 1970-01-01
  • 1970-01-01
  • 2011-02-17
相关资源
最近更新 更多