我有这个数字x,我想找到所有相对较重要的数字。
到目前为止我的代码:
For i = 1 To x-1
if [number n is relatively prime to x] Then
ListBox1.Items.Add(x)
End If
Next
提前致谢
答案 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中自然地在可变数组之上对其进行编码。