相对素数VB

时间:2012-03-01 16:42:51

标签: vb.net primes

我有这个数字x,我想找到所有相对较重要的数字。

到目前为止我的代码:

 For i = 1 To x-1
        if [number n is relatively prime to x] Then
             ListBox1.Items.Add(x)
        End If
  Next

提前致谢

2 个答案:

答案 0 :(得分:2)

如果两个数字的最大公约数为1,则它们是相对素数.VB没有内置的GCD函数,但算法很简单(大约2300年前!):

function gcd(m, n)
    while n > 0
        m, n = n, m%n
    return m

请注意,m和n是同时分配的。我将留给你完成VB实现。你可能会对谷歌搜索一个数字的总和及其总数列表感兴趣,这就是你在计算的。

答案 1 :(得分:1)

假设你只想要小于x的数字,这些数字与它相互作用 - 你也可以采取一种生成方法,运行一种特殊的筛子。当生成每个素数的倍数时,您会看到该序列“命中”您的上限x或是否错过它,并将其中的所有数字标记为非互质它确实击中了x

或者在“伪代码”中(使用Haskell语法:)),

coprimes n = go( [1..n-1], [2..n-1]) where
  go( xs, []   ) = xs           -- ' no more numbers to sieve - return xs
  go( xs, p:ks ) =              -- ' p is first in candidates, ks is the rest
    let ms = [p, 2*p .. n-1]    -- ' p's multiples
    in
      go( if ( (mod n p) == 0 ) -- ' is n a multiple of p ?
            then (xs\\ms)       -- ' yes: remove p's multiples
            else xs,            -- ' no:  possible coprimes
          ks\\ms )              -- ' candidates to sieve

Haskell的集合差异\\对于集合的无序列表表示效率非常低,但是您可以在VB中自然地在可变数组之上对其进行编码。