Description

曾经有一个老掉牙的游戏放在我面前, 我没有珍惜. 直到这个游戏停产才追悔莫及. 人世间最痛苦的事情莫过于此, 如果上天给我一个再玩一次的机会, 我一定要, 通关!

如果你真的很想玩这个游戏, 那么就先看看我的题目吧, 搞不定这些的话是没办法通关的哟. 第一关其实很简单, 只有一个关闭的有密码锁的大门. 这大门上写着一个奇怪的算式, 估计 是要你利用它算出密码来开门吧 (果然是老掉牙的情节).

传说中这个式子中的 \(p\)\(q\) 是两个奇质数, 等号右边算出来应该就是密码了吧, 你是 真的算不出来么?

\[\sum_{k=1}^{\frac{p-1}{2}} \lfloor \frac{kq}{p} \rfloor + \sum_{k=1}^{\frac{q-1}{2}} \lfloor \frac{kp}{q} \rfloor\]

Input

只有一行, 两个奇质数, 分别表示 \(p, q\).

Output

一个数, 表示算式结果.

Sample Input

5 7

Sample Output

6

Data Range

保证 \(p, q \leq 2^31-1\).

An Introduction to the Theory of Numbers 第 6 版定理 100

Explanation

据说这个定理是出自《数论导论》的......

然后想半天想不出来, 但总觉得形式比较漂亮 (雾), 最后只能翻题解:

打表找规律大法好 QwQ (CreationAugust)

这种就只能膜了...... 但是还有一些比较正常的, 例如:

原文链接:http://blog.csdn.net/czysjr/article/details/42360361

\(p = q\) 的情况就不用说了

\(p \neq q\) 时,

\(\frac{p}{q}\) 显然像一个斜率, 而下取整显然是就是这条直线下面点的数量.

这个看起来就和我的想法比较相近了, 然而最后还是打表=w=

Source Code


#include <iostream>
#include <cstdlib>
#include <cstdio>

using namespace std;
typedef long long lli;

lli p, q;

int main(int argc, char** argv)
{
    scanf("%lld%lld", &p, &q);
    lli res = 0;
    if (p == q)
        res = (p + 1) * (p - 1) / 4;
    else
        res = (p - 1) * (q - 1) / 4;
    printf("%lld\n", res);
    return 0;
}