C++ 检查一个数字是否被许多其他数字平均除

C++ 检查一个数字是否被许多其他数字平均除,c++,if-statement,for-loop,main,iostream,C++,If Statement,For Loop,Main,Iostream,我有一个编程问题,需要我检查30000个六边形数字(由公式给出:H(n)=n(2n-1)),其中有多少可以被数字1到12整除 我的代码如下: #include <iostream> #include <cstring> using namespace std; int main() { int hex, count = 0; for (int n = 1; n <= 30000; n++) { hex = n * ((2

我有一个编程问题,需要我检查30000个六边形数字(由公式给出:H(n)=n(2n-1)),其中有多少可以被数字1到12整除

我的代码如下:

#include <iostream>
#include <cstring>

using namespace std;

int main()
{
    int hex, count = 0;

    for (int n = 1; n <= 30000; n++)
    {
        hex = n * ((2 * n) - 1);

        if (hex % 1 == 0 && hex % 2 == 0 && hex % 3 == 0 && hex % 4 == 0 && hex % 5 == 0 && hex % 6 == 0 && hex % 7 == 0 && hex % 8 == 0 && hex % 9 == 0 && hex % 10 == 0 && hex % 11 == 0 && hex % 12 == 0)
        {
            count++;
        }
    }

    cout << count << endl;
}
#包括
#包括
使用名称空间std;
int main()
{
整数十六进制,计数=0;

对于(int n=1;nIf
a[i]| x
for
1您可以简单地使用另一个for循环来摆脱您使用的长If语句

#include <iostream>
#include <cstring>

using namespace std;

int main(){
    int hex, count = 0;
    int divider = 12;

    for (int n = 1; n <= 30000; n++){
        hex = n * ((2 * n) - 1);

        int subcount = 0;
        for (int i = 1; i <= divider; ++i){
            if (hex % i == 0){
                ++subcount;
                if(subcount == devider){
                     ++count;
                }
            }
        }
    }

    cout << count << endl;
}
#包括
#包括
使用名称空间std;
int main(){
整数十六进制,计数=0;
整数除法器=12;

for(int n=1;n提示:如果一个数字被12等分,那么它也必须被2、3、4和6等分。您还可以将
hex%2==0
替换为
!(hex%2)
等等。
hex%1==0
?真的吗?这是不是有点像
0==0
使用名称空间std;
然后声明变量
hex
count
是一个等待完成的曼哈顿项目。我理解你的意思,把%1放进去是不必要的,谢谢你的建议。还有谢谢tkausl,它确实缩短了一点。我只是有点困惑,你是怎么得到27720的?我假设它可以被1到12的数字整除?@Gardenia 27720是1,2,…12的公倍数,我的方法是,你需要1..12中所有的素数幂。所以你应该检查2³。3²。5.7.11(这是说“1..12的lcm是什么?”)@MartinBonner是的,这是唯一一种计算LCM的方法。如何计算LCM与所讨论的内容不同?在这里,您正在进行不必要的迭代,例如,您正在检查除法3、4和12,如果它同时被3和4除,它将自动被12除。因此,计算LCM为1到12,用它检查可除性。@instantce无意冒犯。我同意你的评论。这只是实现目标的一种替代方法,而不是使用长if语句。但你的代码仍然是错误的,OP想找到可以被1到12之间的所有数字整除的数字的计数。你要做的是,对于每个“十六进制”,如果它被“I”整除,你将增加“计数”。只有当计数可被1整除到12时,才需要将计数增加1。将IF语句更改为IF(十六进制%i)break;else IF(i==divider)count++;