这是一个玩弄gcd id najpwg http://www.spoj.com/problems/NAJPWG/

时间:2014-11-27 19:44:26

标签: greatest-common-divisor

我在这段代码中得到任何建议。我正在计算总和n / i在哪里 n是输入,我从2变为n。 例如5对将是(2,2),(3,3),(4,4),(5,5),(2,4)

#include<stdio.h>

int main()
{
int i,j,t,n,m;
long long k;
scanf("%d",&t);
for(i=0;i<t;i++)
{
    scanf("%d",&n);
    m=n/2;
    k=0;
    for(j=2;j<=m;j++)
    {
        k+=(n/j);
    }
    k+=(n-m);
    printf("Case %d: %lld\n",i+1,k);
}
return 0;
}`

1 个答案:

答案 0 :(得分:0)

您的代码存在很多问题。

广泛分类 -

  1. 当问题2得到解决时,可以讨论优化问题。

  2. 代码给出了错误的答案。你的算法简直是错误的。转移这种方法并根据&#34; Euler Totient&#34;和初级动态规划。

  3. 例如,

     Let's say,  the number is N.
    

    现在,N将包含N-1拥有的所有对。除此之外,它还包含一些较新的(你可以借助Euler Totient函数)。

    您的练习的示例测试用例 -

    input-
    25
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    1021
    99998
    99999
    100000
    
    output-
    Case 1: 0
    Case 2: 0
    Case 3: 1
    Case 4: 2
    Case 5: 4
    Case 6: 5
    Case 7: 9
    Case 8: 10
    Case 9: 14
    Case 10: 17
    Case 11: 23
    Case 12: 24
    Case 13: 32
    Case 14: 33
    Case 15: 41
    Case 16: 48
    Case 17: 56
    Case 18: 57
    Case 19: 69
    Case 20: 70
    Case 21: 82
    Case 22: 204311
    Case 23: 1960304047
    Case 24: 1960339246
    Case 25: 1960399246
    
    *