我试图通过找出最大的素数因子并将数字除以素因子的幂来在codefights.com上解决这个问题。
int highestPower(int N, int A) {
int B =A, j=0,c=0, p=0,x;
for(int i = 2; i<=A; i++) {
if( A%i == 0) {
p = i>p ? i:p;
A/=i;
--i;
}
if(i*i > A && B==A) {
p = B;
break;
}
}
for(;(x = N/((int)Math.pow(p,++j))) > 0; )
c+=x;
return c;
}
Input:
0<N<10^9
1<A<10^9
但是这种方法在某些测试用例中会失败。一个这样的测试用例是:
N:100
A:1024
Output:97
Expected Output:9
有关如何解决此问题的任何建议?
答案 0 :(得分:1)
最后一个for循环计算除以N的p的幂,但是如果A的因子分解中的p的幂大于1,则它与所需答案不同。在给定的示例中,您计算2 ^ 97除以100!,但它与您的要求无关。至少你应该用A的因式分解p(在这种情况下为10),但我不知道在一般情况下它是否足够。