可能重复:
Generating a sequence using prime numbers 2, 3, and 5 only, and then displaying an nth term (C++)
我一直在为此而头脑风暴,我无法解决这个问题。我需要解决以下问题:
生成以下序列并在其中显示第n个术语 序列
2,3,4,5,6,8,9,10,12,15等.....序列只有素数 2,3,5-
我需要使用基本的C ++,例如while,for,if等。没什么好看的。我之所以无法使用数组,只是因为我对它们了解不多,而且我想了解解决方案的代码。
我没有要求提供完整的解决方案,但我正在寻求指导以解决这个问题......请。
我的问题是,如果序列中的数字可以被除2,3和5之外的任何其他素数整除,我无法弄清楚如何检查数字。
另外,我要说我检查这个号码:
for(int i=2; i<n; i++){
if(i%2==0){
cout<<i<<", ";
}else if(i%3==0){
cout<<i<<", ";
}else if(i%5==0){
cout<<i<<", ";
}
它不能简单地工作,因为它产生的数字如14,可以除以素数7.所以我需要弄清楚如何确保该序列只是可以被2,3和5整除.....我已经在网上发现了很多关于这个问题的解决方案的材料,但是他们所拥有的解决方案太过先进了,我也无法使用它们(也是其中大多数是其他语言...而不是C ++)。我确信这是一种更简单的方式。
答案 0 :(得分:1)
将下一个i值存储在临时变量中,然后将其除以2(只要i%2 == 0)。然后尽可能地除以3。然后是5.然后检查,还剩下什么。
答案 1 :(得分:1)
您的代码存在的问题是,您只需检查其中一个主要因素,而不是全部因素。
以你的14为例。你的代码只检查2,3或5是14的因子,这不是你需要的。实际上,你发现2是14的因子,但另一个因素是7,正如你所说的那样。你缺少的是进一步检查7是否只有因子2,3和5(事实并非如此)。你需要做的是消除所有因素2,3和5,看看剩下的是什么。
我们举两个例子:60和42
60
从因素2开始
继续使用因素3
完成因子5
我们最终得到1,所以这个数字是序列的一部分。
适用于42
再次,从因素2开始
继续使用因素3
完成因子5
我们最终得到7(与1不同),所以这个数字不是序列的一部分。
因此,在您的实现中,您应该在for循环中嵌套3个while循环以反映这种推理。
答案 2 :(得分:0)
这个怎么样?
bool try_hamming(int n)
{
while(n%2 == 0)
{
n = n/2;
}
while(n%3 == 0)
{
n = n/3;
}
while(n%5 == 0)
{
n = n/5;
}
return n==1;
}
当n是汉明数字时,这应该返回true,否则返回false。所以主要功能可能看起来像这样
#include<iostream>
using namespace std;
main()
{
for(int i=2;i<100;++i)
{
if(try_hamming(i) )
cout<< i <<",";
}
cout<<end;
}
这个schould打印出的所有汉明数字都小于100