题解 |「HDU 3501」Calculation 2
题解 |「HDU 3501」Calculation 2
题意
计算小于正整数 且与 不互质的正整数的和
题解
欧拉函数入门题
结论:小于 且与 互质的数的和等于
证明
考虑以下事实:
若 互质,则 互质
把所有小于 且与 互质的数列出来,得到一张长度为 的表 。
接着列出一张新的表 。
根据我们的推理,两张表都是小于 且与 互质的数,那么这两张表应该是相同的。
两表对应项相加得 ,两表长度均为 ,故小于 且与 互质的数的和等于 ,命题得证。
关于代码习惯
个人意见是不使用 #define
定义常量,而是使用 const
或 constexpr
。另外,代码中最好不要出现一些莫名其妙的数字,而是使用有意义的常量名来指代。
#define int long long
是极其糟糕的做法。出于运行效率的考虑,应该仔细思考变量的值域,使用恰当的类型(当然打 Codeforces 是另一回事,因为在 rush 代码的时候顾不上那么多细节)。