이것은 약간의 스포일러이므로, 이것을 스스로 해결하고 싶다면 아직 읽지 마십시오. :) 나는 연속 순으로 힌트를 제공하기 위해 노력할 것이다, 그래서 당신은 순서대로 각각의 힌트를 읽을 수 있고, 더 많은 힌트를 필요로하는 경우 등, 다음 힌트에
힌트 # 1 이동 : 제수 인 경우 을 n의 약수, n/제수는 또한 n의 약수입니다. 예를 들어, 나머지가 0 2분의 100 = 50이므로 2 (100)의 약수는하지만도 50은 100
힌트 # 2 주어 힌트 # 1, 이것이 수단의 약수 인 것을 의미 우리가 i = 2에서 i * i까지 반복 할 수 있다는 것입니다. < = n 소수 요소를 확인할 때입니다. 예를 들어 숫자 100을 확인하는 경우 힌트 # 1을 사용하여 모든 요소를 얻을 수 있기 때문에 10 (10 * 10은 < = 100)으로 루프하면됩니다. 즉 :
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에 대한 주요 요인에 대한 관심 때문에, 단지, N의 첫 번째 요소를 찾아 제수 호출에 충분한, 그리고 우리가 반복적으로 다른 요인을 찾을 수 있습니다 n/제수의 경우. sieve 접근 방식을 사용하고 요인을 찾아 내면서 요인을 표시 할 수 있습니다. C
에서
힌트 # 4 샘플 솔루션 :
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.
출처
2010-08-12 18:58:47
dcp
출력의 어느 부분이 잘못 되었습니까? 요인 또는 가장 큰 주요 요인? – WillfulWizard
'b'가 3,2 또는 5의 요소인지 확인하는 논리를 설명해 주시겠습니까? – Jacob
@Willfulwizrd : 51보다 큰 숫자를 입력하면 52라고 입력한다고 가정하십시오. 가장 큰 소수 요소로 13을 표시해야하지만 이상적으로 2를 대답으로 표시해야합니다. – Khushboo