-9

質問が言うように、私は与えられた数の除数の数を数える必要がありますx. ただし、除数には、指定された数値 x と共通する数字が少なくとも 1 つ必要であるという制約があります。

10 の場合、答えは 2 になります (1、10、2、5 は約数ですが、10 と同じ数字を共有するのは 1、10 だけです)

4

3 に答える 3

2

私はこれがうまくいくと思います:

private static boolean containCommonDigit(int n1, int n2) {
    for (char c : ("" + n1).toCharArray())
        if (("" + n2).contains("" + c))
            return true;
    return false;
}

public static int countSpecialDivisors(int n) {
    int count = 0;
    for (int i = 1 ; i <= n / 2 ; i++)
        if (n % i == 0 && containCommonDigit(n, i))
            count++;
    return count + 1;  // since we are looping to n/2
}

は、それ自体以外にそれ自体の半分を超える約数を持たないn/2ことがわかっているため、ループしているだけであることに注意してください。これが、最後に 1 を追加する理由を説明しています (明らかに、少なくとも 1 つの共通桁をそれ自体と共有しています)。nn

さらなる最適化に関するアイデアについては、コメントを参照してください。

于 2012-08-31T17:02:32.183 に答える
1

1) 数のすべての約数を見つける必要があります。難しいかもしれません - http://en.wikipedia.org/wiki/Divisor_functionを参照してください

2) 次に、数値と除数で指定します。すべての数字を抽出する必要があります。簡単です。10 で割った余りを取得し、小数部に進みます。数字を Set に入れる

3)セットでremoveAllを使用し、セットが変更された場合-共通の番号があります

見つかった次の約数で手順 2/3 を繰り返します。

于 2012-08-31T17:02:12.277 に答える
0

これを行うには非常に簡単な方法があります。

 public String (int numberToBeFactored){
      String result = "1, ";

      for(int i = 2; i < numberToBeFactored){
           if (numberToBeFactored % i == 0){
               result = result + Integer.toString(i) + ", ";
           }
       }
       result.trim();
       return result; 

   }
于 2012-08-31T17:41:51.073 に答える