计数数字与n共同小于m

时间:2012-12-18 11:09:26

标签: algorithm number-theory

对n小于m,m的数字进行计数

我想通过(phi(n)/ n)* m 来做这件事,但总是有一些小错误。

一种方法可以使用包含 - 排除原则,但我正在寻找比这更好的算法。

例如

n = 20 m = 10
{1, 3, 7, 9}
Ans = 4

1 个答案:

答案 0 :(得分:3)

首先你可以找到所有x< m表示x是素数,x是n的除数。它以O(m *(x.count))

计算
i = 1;

while x[i] not empty do  
{
    j = 1;

    while x[i] * j < m
    {
        s[(x[i] * j)] = false;
        j++; 
    }

    i++;
}

现在你可以找到s [k] = true的所有s [k]。

以O(m)

计算

所以你可以在O(m *(x.count))

中完成所有步骤