确定可以被分解为2 ^ p5 ^ q的数字集的算法

And*_*ndy 3 algorithm math factorization

我正在尝试编写一个算法,该算法可以返回小于实例n的正整数集,并且可以将其分解为2 ^ p5 ^ q.我的数学不是最好的,所以我不知道如何确定一个数字是否可以用这种特定的形式分解...

任何帮助将非常感激 :)

sam*_*gak 5

我不知道如何确定一个数字是否可以在这种特定形式中分解

而不是测试给定数字是否可以分解并运行所有小于n的数字,为什么不生成它们,例如:

void findNumbers(int n)
{
    int p = 0;
    int power2 = 1; 
    while(power2 < n)
    {
        int q = 0;
        int power5 = 1;
        while(power5 * power2 < n)
        {
            printf("%d p = %d q = %d\n", power5 * power2, p, q);
            power5 *= 5;
            q++;
        }
        power2 *= 2;
        p++;
    }
}
Run Code Online (Sandbox Code Playgroud)

输出n = 500:

1 p = 0 q = 0
5 p = 0 q = 1
25 p = 0 q = 2
125 p = 0 q = 3
2 p = 1 q = 0
10 p = 1 q = 1
50 p = 1 q = 2
250 p = 1 q = 3
4 p = 2 q = 0
20 p = 2 q = 1
100 p = 2 q = 2
8 p = 3 q = 0
40 p = 3 q = 1
200 p = 3 q = 2
16 p = 4 q = 0
80 p = 4 q = 1
400 p = 4 q = 2
32 p = 5 q = 0
160 p = 5 q = 1
64 p = 6 q = 0
320 p = 6 q = 1
128 p = 7 q = 0
256 p = 8 q = 0
Run Code Online (Sandbox Code Playgroud)

它只是循环遍历p和q的每个组合,直到n.

如果要排除p = 0和q = 0,只需将循环设置为1并设置power2 = 2和power5 = 5.