我在这段代码中得到任何建议。我正在计算总和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;
}`
答案 0 :(得分:0)
您的代码存在很多问题。
广泛分类 -
当问题2得到解决时,可以讨论优化问题。
代码给出了错误的答案。你的算法简直是错误的。转移这种方法并根据&#34; Euler Totient&#34;和初级动态规划。
例如,
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
*