有關弗吉尼亞大學在線評測問題10139 - Factovisors,2號n
和m
給出的,我們需要檢查是否m
分n!
。爲什麼是錯誤的答案烏瓦:Factovisors
我用的算法:
生成素數,直到常量數
採取
m
,並得到其質數因子對於
m
的因素每一個素,計算getpower
功能對於n
並對它們進行比較
我測試了不同的情況,它給我錯誤的答案,任何建議?
這裏是我的代碼:
bool Factovisor (int n, int m) {
/* Special Cases */
if(n==0 && m!=1)
return false;
else if(n==0&&m==1)
return true;
else if(m==0)
return false;
else if(m==n||m==1)
return true;
else if (n >= m)
return true;
else {
vector <factores> factores_in_m;
int index = 0;
int k=m;
/* first I generate all primes in primes vector */
for (int i = 0; i < primes.size(); i++) {
if (primes[i] > k) {
break;
} else {
/* factores is struct contain the prime and count*/
factores f = {primes[i], 0};
while (k % primes[i] == 0) {
f.count += 1;
k = k/primes[i];
}
if (f.count) {
factores_in_m.push_back(f);
}
}
}
if (k > 1) {
if (n < k) {
return false;
} else {
factores f;
f.prime= k;
f.count =1;
factores_in_m.push_back(f);
}
}
for (int i = 0; i < factores_in_m.size(); i++) {
if (factores_in_m[i].count - get_powers(n, factores_in_m[i].prime) > 0) {
return false;
}
}
return true;
}
}
int get_powers (int n, int p) {
int result = 0, power = p;
while (power <= n) {
result += n/power;
power =power* p;
}
return result;
}
bool isPrime (int n) {
for (int i = 2; i < n; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
void get_prime() {
for (int i = 2; i < maxn0; i++) {
if (isPrime(i)) {
primes.push_back(i);
}
}
}
get_powers是如何實現的?你確定你的素數是正確的嗎? – 2013-05-10 09:26:33
這裏是你的代碼 ' int get_powers(int n,int p){ \t int result = 0,power = p; \t while(power <= n){ \t \t result + = n/power; \t \t power = power * p; \t} \t返回結果; } ' – userG 2013-05-10 09:30:01