Для задачи 10139 - Factovisors на UVa Online Judge, 2 номера n
и m
даны, и мы должны проверить, делится ли m
n!
.Почему Неправильный ответ Ува: Factovisors
Я использую алгоритм:
Генерация простых чисел до сопзЬ числа
Возьмите
m
и получить его штрихами факторДля каждого простого в
m
«s факторов, вычислить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'? Вы абсолютно уверены, что ваше первое поколение правильное? –
здесь вы являетесь его кодом ' int get_powers (int n, int p) { \t int result = 0, power = p; \t while (мощность <= n) { \t \t результат + = n/мощность; \t \t мощность = мощность * p; \t} \t результат возврата; } ' – userG