Reverse Card (Easy Version)
来点依靠注意力的解法。
很容易写出一份暴力程序。打开一个 python 交互式终端,写一份打表程序:
In [1]: from math import gcd
In [2]: def f(n,m):
...: for i in range(1,n+1):
...: for j in range(1,m+1):
...: if (i+j)%(j*gcd(i,j))==0:
...: print(i,j)
...:
然后,调用 f
,尝试一些样例:
In [3]: f(20,20)
输出为:
1 1
2 1
2 2
3 1
4 1
5 1
6 1
6 2
6 3
7 1
8 1
9 1
10 1
10 2
11 1
12 1
12 4
13 1
14 1
14 2
15 1
15 3
16 1
17 1
18 1
18 2
19 1
20 1
20 5
很容易注意到, 成立的其中一个必要不充分条件是 。
让我们充分发挥想象力。 可得到 。因此,原式等价于 。枚举 依次计算完全可行。
#include<bits/extc++.h>
using namespace std;
namespace pbds=__gnu_pbds;
using ui=unsigned int;
using uli=unsigned long long int;
using li=long long int;
int main(void){
ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);
size_t T;
cin>>T;
while (T--){
size_t n,m;cin>>n>>m;
uli ans=n;
for (uli b=2;b<=m;++b)
ans+=(n+b)/(b*b);
cout<<ans<<'\n';
}
return 0;
}
这样,我们通过人类智慧的方式,避免了任何复杂数论知识,在 CF 紧张的赛时时间快速解决本题。