프로젝트 오일러의 Problem no 23을 풀고 있습니다. 나는 간단한 논리를 사용했지만 정확한 답을 얻고 있지만 프로그램을 실행하는 데는 상당한 시간이 걸린다.프로젝트 오일러 # 23에 대한 내 코드의 최적화
내 코드를 최적화 할 수있는 방법이 있습니까?
먼저 두 개의 풍부한 숫자의 합계 인 모든 숫자를 계산 한 다음 전체 합에서 뺍니다.
int factorsum(int);
int main()
{
int i, j, s = 0, t, m;
for (i = 24; i <= 28123; i++) //sum of 2abundant nos start from 24
{
for (j = 12; j <= i/2; j++) {
t = factorsum(j);
if (t > j) {
m = i - j;
t = factorsum(m);
if (t > m) {
s = s + i;
break;
}
}
}
}
j = 0;
for (i = 1; i <= 28123; i++)
j = j + i;
printf("\n%d", (j - s));
return 0;
}
int factorsum(int j) //checking sum of factors
{
int k, s = 0;
for (k = 1; k <= (j/2); k++) {
if (j % k == 0) {
s = s + k;
}
}
return s;
}
분해하지 마십시오. n의 배수 인 인덱스의 요소에 n을 추가합니다. – nhahtdh
코드는 원래 질문에 나온 것처럼 원래 형식이되어 있습니까? 적어도 (거의) 들쭉날쭉 해지면 이해하고 최적화하는 것이 훨씬 쉽기 때문입니다. – huon
IMHO 프로그램에서 한 걸음 물러나서 살펴보면 변수 값이 없다는 것을 알 수 있습니다 (사용자 입력 없음). 대신 프로그램을 실행할 때마다 동일한 결과를 얻을 수 있습니다. 이는 가치가있는 테이블 등 많은 최적화 가능성이 있음을 나타냅니다. –