正如问题所说。我需要计算给定数字的除数的数量,即x。但是约束条件是除数必须至少有一个与给定数字x相同的数字。
说10回答是2.(1,10,2,5是除数但只有1,10与10相同的数字)
答案 0 :(得分: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
,因为我们知道n
除了它本身之外没有超过其自身一半的除数,这就解释了为什么我们在末尾添加1(显然,{{ 1}}与自己共享至少一个共同数字。
请参阅有关进一步优化的意见的评论。
答案 1 :(得分:1)
1)你需要找到所有除数的数字,这可能很棘手 - 见http://en.wikipedia.org/wiki/Divisor_function
2)接下来,由数字和它的divisor给出 - 你需要提取所有数字,这很简单 - 只需得到除数的余数为10,然后继续得到小数部分。将数字放入Set
3)在集合上使用removeAll,如果设置已更改 - 则有常用数字
使用您找到的下一个除数重复步骤2/3。
答案 2 :(得分: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;
}