时间超时,请问应该如何改进

问题遇到的现象和发生背景

img

用代码块功能插入代码,请勿粘贴截图

#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);
    }
}
不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^