2016-04-11 8 views
3

私はrand(1..10) * 3を使用して、3で割り切れる乱数を生成しています。xで割り切れない乱数を生成しますか?

で乱数を生成する簡単な方法はありますか?配列からサンプリングすることなく3(または他の任意の数)で割り切れますか?

+0

最も簡単な方法は、生成された数のモジュロ3が0であるかどうかを確認することであり、再生成そうである場合。擬似コード:while((x = generate_random%3)!= 0) ' –

答えて

8
k = rand(0..1000) 
out = k + k/2 + 1 # The '/' here is integer division. 

0 -> 1 
1 -> 2 
2 -> 4 
3 -> 5 
4 -> 7 
5 -> 8 
6 -> 10 
... 
+2

ループを使うよりもはるかに良い、+1。 –

+0

これは、整数で割ったintが切り捨てられ、floatとして表現されないために可能です。これは "by 3"の場合のみ処理しますが、同じ原則で任意の数を再マップできます。 – tadman

+0

'N> 1 '(私は数学記号を使っていますが、私はルビーをよく知りません):' out =⌊(k-1)* N /(N-1)⌋+ 1'。 (k = 0の場合は「1」になることがOKであれば、「k-1」は「k」で置き換えることができる)(k <0の場合は動作しない)。 – 12431234123412341234123

1

このようなものがありますか?

y = 3 
x = nil 
loop { break if (x=rand(1..10))%y !=0 } 
1
int getNumberNotDivisibleBy9() 
{ 
    srand(time(NULL)); 
    int randm; 
    randm = rand(); 
    while (randm % 9 == 0) 
     randm = rand(); 
    return randm; 
} 
関連する問題