【ProjectEuler】ProjectEuler_021
// Let d(n) be defined as the sum of proper divisors of n (numbers less than n which divide evenly into n).
// If d(a) = b and d(b) = a, where a b, then a and b are an amicable pair and each of a and b are called amicable numbers.
//
// For example, the proper divisors of 220 are 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 and 110; therefore d(220) = 284. The proper divisors of 284 are 1, 2, 4, 71 and 142; so d(284) = 220.
//
// Evaluate the sum of all the amicable numbers under 10000.
#include <iostream>
#include <windows.h>
using namespace std;
const int MAX_NUM = 10000;
int number[MAX_NUM + 1];
//
int GetAmicableNum(int num)
{
//
int amicableNum = 0;
for(int i = num / 2; i >= 1; i--)
{
if(num % i == 0)
{
amicableNum += i;
}
}
//
number[num] = amicableNum;
//
return amicableNum;
}
void F1()
{
cout << "void F1()" << endl;
LARGE_INTEGER timeStart, timeEnd, freq;
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&timeStart);
int result = 0; //
int tempAmicableNum = 0;
for(int i = 1; i <= MAX_NUM; i++)
{
tempAmicableNum = GetAmicableNum(i);
//
if(tempAmicableNum <= MAX_NUM && number[tempAmicableNum] == i && tempAmicableNum != i)
{
cout << number[i] << " " << i << endl;
result += i + tempAmicableNum;
}
}
cout << MAX_NUM << " " << result << endl;
QueryPerformanceCounter(&timeEnd);
cout << "Total Milliseconds is " << (double)((double)(timeEnd.QuadPart - timeStart.QuadPart) * 1000 / (double)freq.QuadPart) << endl;
}
//
int main()
{
F1();
return 0;
}
/*
void F1()
220 284
1184 1210
2620 2924
5020 5564
6232 6368
10000 31626
Total Milliseconds is 216.438
By GodMoon
*/
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
cocos2d Lua 학습(一)ios에서 루아 함수 호출 및 전참 방법 lua 코드: 출력 결과: lua 호출 C++ 방법: add 함수: lua 코드: 출력 결과: 함수를 호출합니다. 함수를 호출하려면 다음 협의를 따르십시오. 우선, 호출할 함...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.