Почему при условии true в if его тело не выполняется?
Выполнял следующее задание: Количество всех натуральных делителей натурального числа n обозначается σ0(n). Сумма всех натуральных делителей числа n обозначается σ1(n). Выведите σ0(n) и σ1(n). Задание вроде решил, но в функции SumDivisor при проверке второго условия, даже при истинности не заходит внутрь и не изменяет sum. Пробовал на 6 выводит 3 9, а надо 4 12.
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <vector>
#include <cmath>
#include <set>
#include <map>
#include <string>
using namespace std;
#define lli long long int
#define lld long long double
#define ulli unsigned long long int
#define ulld unsigned long long double
ulli CntDivisor(ulli x, ulli i = 2, ulli cnt = 2)
{
if (i > sqrt(x))
{
return cnt;
}
if (x % i == 0)
{
++cnt;
}
CntDivisor(x, ++i, cnt);
}
ulli SumDivisor(ulli x, ulli i = 2, ulli sum = 0)
{
if (i > sqrt(x))
{
return sum + 1 + x;
}
if (x % i == 0)
{
sum += i;
}
SumDivisor(x, ++i, sum);
}
int main()
{
ulli x;
cin >> x;
cout << CntDivisor(x) << " " << SumDivisor(x);
return 0;
}