对n小于m,m的数字进行计数
我想通过(phi(n)/ n)* m 来做这件事,但总是有一些小错误。
一种方法可以使用包含 - 排除原则,但我正在寻找比这更好的算法。
例如
n = 20 m = 10
{1, 3, 7, 9}
Ans = 4
答案 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))
中完成所有步骤