3

数値が100,000 ほど大きくなる可能性がある場合、数値が 3 と 5 の倍数の合計であるかどうかを確認するにはどうすればよいですか。2 つの部分が 3 と 5 の倍数のみであり、3 の倍数である部分が 5 の倍数である部分よりも大きくなるように、数値を 2 つの部分に分割する最適化された方法が必要です。可能であれば、その番号を拒否する必要があります。

例えば:

1  => cant be split so rejected ,
35 => 30 + 5 ,
65 => 60 + 5 (Though 30 + 35 could be a split but since part which is multiple of 3 has to be                greater than the part which is multiple of 5),
11 => 6+5 
4

5 に答える 5

1

3最初の部分が の倍数で、2 番目の部分が の倍数である場合に、最初の部分5(3 の倍数) が 2 番目の部分よりも大きいという追加の要件がある場合に、数値を 2 つの部分に分割する方法を見つけるつもりなら、(5 の倍数) 部分の場合、それはかなり自明です。

20 以上のすべての数字は、この方法で分割できます。

証明: 与えられた数値Nに対して、3 つの数値 , の 1 つだけがN3の倍数N-5になります (算術N-10を考えてください)。したがって、これら 3 つの分割の 1 つが要件を満たします。modulo 3

N      0
N-5    5
N-10  10

でありN >= 20、第 1 部分は第 2 部分よりも大きい (または等しい)。

于 2013-09-08T12:16:09.240 に答える
0

頭のてっぺんから -

Q = N / 3、整数除算、切り捨てを行います。R を剰余とします。

R = 0 の場合は完了です。

R == 2 の場合、Q を減らします。

それ以外の場合、R は 1 でなければならず、Q から 2 を引きます。

あなたの答えは Q * 3 と N - (Q * 3) です。すべての結果が正であり、3 の倍数 > 5 の倍数の制限が満たされていることを確認します。

(これは本質的にSirkoの答えと同じであることに注意してください.

于 2013-09-08T12:22:55.840 に答える
-2

3 と 5 の最大除数は 1 です。したがって、N = 3、または N >= 5 の場合、3 と 5 の倍数の合計になります。

于 2013-09-08T12:07:42.587 に答える
-5

このコードを使用してください:-お楽しみください:)

$num = 0; // Large Number
$arr = array();
if(isset($_POST['number']) $num = $_POST['number'];
// Assuming you post the number to be checked.

$j=0;

for($i=0;$i<$num;$i++) 
{

if(($num-$i)%3==0 || ($num-$i)%5==0) { $arr[j] = $num - $i; $j++; }

 }
 //This creates an array of all possible numbers.
 $keepLooping = true;
 while($keepLooping)
 { 
  $rand = array_rand($arr,2);
  if(($rand[0] + $rand[1]) == $num) 
   {
    //Do whatever you like with them. :)
   }

    }

私はそれをテストしていませんが、あなたのアイデアのためだけです。可能性を選択する for ループの代わりに、自分に合った方法を選択できます。

于 2013-09-08T12:23:29.613 に答える