Это немного спойлер, поэтому, если вы хотите решить это самостоятельно, не читайте это еще :). Я постараюсь предоставить подсказки в порядке наследования, так что вы можете прочитать каждую подсказку в порядке, и если вам нужно больше подсказок, перейти к следующей подсказке и т.д.
Подсказка # 1: Если делитель делитель n, то n/divisor также является делителем n. Например, 100/2 = 50 с остатком 0, так что 2 является делителем 100. Но это также означает, что 50 является делителем 100.
Подсказка # 2 Учитывая Подсказка # 1, это означает заключается в том, что при проверке на простые множители мы можем зацикливаться от i = 2 до i * i < = n. Например, если мы проверяем число 100, тогда нам нужно всего лишь зацикливать до 10 (10 * 10 - < = 100), потому что, используя подсказку №1, мы получим все факторы. То есть:
100/2 = 50, so 2 and 50 are factors
100/5 = 20, so 5 and 20 are factors
100/10 = 10, so 10 is a factor
Подсказка # 3 Поскольку мы заботимся только о простых множителей для п, то достаточно просто найти первый фактор п, назовем его делителем, а затем мы можем рекурсивно найти другие факторы для n/делителя. Мы можем использовать подход sieve и отмечать факторы, как мы их находим.
Подсказка # 4 Раствор образца в C
:
bool factors[100000];
void getprimefactors(int n) {
// 0 and 1 are not prime
if (n == 0 || n == 1) return;
// find smallest number >= 2 that is a divisor of n (it will be a prime number)
int divisor = 0;
for(int i = 2; i*i <= n; ++i) {
if (n % i == 0) {
divisor = i;
break;
}
}
if (divisor == 0) {
// we didn't find a divisor, so n is prime
factors[n] = true;
return;
}
// we found a divisor
factors[divisor] = true;
getprimefactors(n/divisor);
}
int main() {
memset(factors,false,sizeof factors);
int f = 1234;
getprimefactors(f);
int largest;
printf("prime factors for %d:\n",f);
for(int i = 2; i <= f/2; ++i) {
if (factors[i]) {
printf("%d\n",i);
largest = i;
}
}
printf("largest prime factor is %d\n",largest);
return 0;
}
Выход:
---------- Capture Output ----------
> "c:\windows\system32\cmd.exe" /c c:\temp\temp.exe
prime factors for 1234:
2
617
largest prime factor is 617
> Terminated with exit code 0.
какая часть результата неверна? Факторы или самый большой первичный фактор? – WillfulWizard
Не могли бы вы объяснить логику проверки, является ли 'b' фактором в 3,2 или 5? – Jacob
@Willfulwizrd: предположим, что если я введу любое число, большее 51, скажем, если я нахожу 52. В идеале он должен отображать 13 как самый большой простой коэффициент, но он отображает 2 в качестве ответа. – Khushboo