2016-05-01 7 views
-7

ある最初の1500の自然数を見つけ、私が試してみました:その要因のいずれかONLY 2、3、または5

static void primeFactors(int n) 
     { 
      int t = 0; 
      List<int> lst = new List<int>(); 

      for (int c = 2; c <= n; c = c + 1) 
      { 
       t = c; 
       if (t % 2 == 0 || t % 3 == 0 || t % 5 == 0) 
       { 
        Console.Write("{0} : ", t); 
        while (t % 2 == 0) 
        { 
          Console.Write("{0} ", 2); 
         t = t/2; 
        } 


        for (int i = 3; i <= Math.Sqrt(t); i = i + 2) 
        { 
         while (t % i == 0) 
         { 
          Console.Write("{0} ", i); 
          t = t/i; 
         } 
        } 

        if (t >2) 
         Console.Write("{0}", t); 
        Console.WriteLine(); 
       } 
      } 
     } 

をマイ出力:

2 : 2 
3 : 3 
4 : 2 2 
5 : 5 
6 : 2 3 
8 : 2 2 2 
9 : 3 3 
10 : 2 5 
12 : 2 2 3 
14 : 2 7 ** should not be list 
15 : 3 5 
16 : 2 2 2 2 
18 : 2 3 3 
20 : 2 2 5 
21 : 3 7 ** should not be list 
22 : 2 11 ** should not be list 
24 : 2 2 2 3 
25 : 5 5 
26 : 2 13 ** should not be list 
27 : 3 3 3 
28 : 2 2 7 ** should not be list 
30 : 2 3 5 

必要な出力: 最初の20個の数字である(をセミコロンの後に記載されている要因):

2 : 2 

3 : 3 

4 : 2 2 

5 : 5 

6 : 2 3 

8 : 2 2 2 

9 : 3 3 

10 : 2 5 

12 : 2 2 3 

15 : 3 5 

16 : 2 2 2 2 

18 : 2 3 3 

20 : 2 2 5 

24 : 2 2 2 3 

25 : 5 5 

27 : 3 3 3 

30 : 2 3 5 

32 : 2 2 2 2 2 

36 : 2 2 3 3 

40 : 2 2 2 5 

注:14(2*7),21 (3*7), 22 (2*11), 26 (2*13)は、 st。因子は2、3または5のいずれかでなければなりません

+1

すべてが異なる言語です。まず、どの言語をコードに入れたいですか? – surajsn

+0

私はvb/cのいずれかに必要です – nandi

+0

自然数は2、3、5を要素としています... 3つのうちの1つを他のものまたはそれ自身と置き換えています......これらの言語にタグを変更してください。 – DarkV1

答えて

1

問題について考えてみましょう。数字はxで、フィルタを通します(実際にはコード内でこれをやっています)。最初のフィルタは、「2で割り切れる数を2で割っている間」と言うでしょう。 2番目のフィルターは3と同じことを言い、3番目のフィルターは5と同じことを言うでしょう。最後に残っているものが1であるかどうかを確認します。

function isDivisible(t) { 
    while (t % 2 == 0) { 
     t = t/2; 
    } 
    while (t % 3 == 0) { 
     t = t/3; 
    } 
    while (t % 5 == 0) { 
     t = t/5; 
    } 
    return t == 1; 
} 

これは決してこの問題に近づく最速の方法ではありません。はるかに高速なソリューションがあります。

+0

期待通りに動作しません – nandi

+0

@nandiどうですか?何がうまくいかないの? – winhowes

+0

 static void isDivisible(int t) { int count = 0; int num = t; while (num % 2 == 0) { num = num/2; Console.Write(num); } while (num % 3 == 0) { num = num/3; Console.Write(num); } while (num % 5 == 0) { num = num/5; Console.Write(num); } if (num == 1) return ; } Output: for 6 : output is 3,1, actually 2,3 
nandi

関連する問題