Ta có công thức tính tổng các ước số của một số N = ai x bj x … x ck là: (ai + 1 - 1)/(a - 1) x (bj + 1 - 1)/(b - 1) x … x (ck + 1 - 1)/(c - 1).
Giả sử N = 360 và mình đã có 1 vector lưu lại các thừa số nguyên tố sau khi đã phân tích ra như sau:
2 2 2 3 3 5
Và mình bắt đầu tính tổng các ước của 360 theo công thức trên như sau:
int main()
{ // N = 360 => Sum of divisors = 1170
vector<int> analyzation(6);
analyzation[0] = analyzation[1] = analyzation[2] = 2;
analyzation[3] = analyzation[4] = 3;
analyzation[5] = 5;
int sum = 1;
while(!analyzation.empty()) {
auto it = find(analyzation.begin(), analyzation.end(), analyzation[0]);
sum *= ((pow(analyzation[0], *it + 2) - 1) / (analyzation[0] - 1));
analyzation.erase(analyzation.begin(), analyzation.begin() + *it + 1);
}
cout << sum;
return 0;
}
Nhưng khi compile & run thì Codeblocks bị lỗi, không cho ra kết quả nào hết. IDEone thì báo runtime error: https://ideone.com/LTolca
Mình thực sự ko biết bị lỗi chỗ nào, nhờ mọi người giúp đỡ ạ. Xin cảm ơn!