#include
int A(int n, int i);
int main(void)
{
int n, a, sum = 0, mi = 1;
do
{
mi++;
scanf("%d", &n);
getchar();
a = n;
sum = 0;
while (n > 0)
{
sum = sum + A(n, n);
n--;
}
printf("%d\n",sum);
} while (mi <= 50);
}
int A(int n, int i)
{
if (i == 1)
return 1;
if (n % i == 0)
if (i % 2 == 1)
{
return i;
}
return A(n, --i);
}
可以先算出每一个g,存进数组,再求一个前缀和,输出结果
#include <stdio.h>
long long A(long long n);
int main(void)
{
long long n, sum = 0;
do
{
scanf_s("%I64d", &n);
getchar();
sum = 0;
while (n > 0)
{
sum = sum + A(n);
n--;
}
printf("%d\n", sum);
} while (1);
}
long long A(long long n)
{
if (n == 1)
{
return 1;
}
if (n == 0)
{
return 0;
}
if (n % 2 == 1)
{
return n;
}
else
{
long long m = n / 2;
return A(m);
}
}
不知道你这个问题是否已经解决, 如果还没有解决的话: