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 紧张的赛时时间快速解决本题。

posted @ 2024-05-02 17:03  MrPython  阅读(5)  评论(0)    收藏  举报  来源