C 返回单个整数,即解算(A)mod 100000007的值 /** *@input A:Integer * *@输出整数 */ 整数解算(整数A){ INTANS,我; ans=0; i=1; 而(ians+def(i)很容易溢出,当然超出了时间限制。如果

C 返回单个整数,即解算(A)mod 100000007的值 /** *@input A:Integer * *@输出整数 */ 整数解算(整数A){ INTANS,我; ans=0; i=1; 而(ians+def(i)很容易溢出,当然超出了时间限制。如果,c,algorithm,C,Algorithm,返回单个整数,即解算(A)mod 100000007的值 /** *@input A:Integer * *@输出整数 */ 整数解算(整数A){ INTANS,我; ans=0; i=1; 而(ians+def(i)很容易溢出,当然超出了时间限制。如果A=100000,您的主解算函数将运行100K次,在def中,它将再次从1循环到100K。100K*100K=肯定是TLE。我如何减少这种情况?我被困在这里很长时间了。您能解释一下代码在做什么吗?不要使用递归,因为它肯定对w没有帮助ith性能

返回单个整数,即解算(A)mod 100000007的值
/**
*@input A:Integer
* 
*@输出整数
*/
整数解算(整数A){
INTANS,我;
ans=0;
i=1;

而(i
ans+def(i)
很容易溢出,当然超出了时间限制。如果A=100000,您的主解算函数将运行100K次,在def中,它将再次从1循环到100K。100K*100K=肯定是TLE。我如何减少这种情况?我被困在这里很长时间了。您能解释一下代码在做什么吗?不要使用递归,因为它肯定对w没有帮助ith性能
/**
 * @input A : Integer
 * 
 * @Output Integer
 */
int solve(int A){
    int ans,i;
    ans=0;
    i=1;
    while(i<=A){
        ans=((ans+def(i))%1000000007);
        i++;
    }
    return (ans);
}

int def(int m){
    int ans,k;
    ans=1;
    k=1;
    while(k<=m){
        if(gcd(k,m)==1){
            ans=ans*k;
        }
        k++;
    }
    return (ans%m);
}

int gcd(int a, int b)
{
    if (b == 0)
        return a;
    return gcd(b, a % b); 
}
Def P(m):
    ans=1
    k=1
    while k<=m:
        if GCD(k,m)==1:
            ans*=k
        k+=1
    return (ans % m)

def F(A):
    ans = 0
    i=1
    while i<=A:
        ans+=P(i)
        i+=1
    return ans % 1000000007