[BJWC2012]算不出的等式 题解

[BJWC2012]算不出的等式 题解

题目地址:洛谷:【P4132】[BJOI2012]算不出的等式 – 洛谷、BZOJ:Problem 2659. — [Beijing wc2012]算不出的算式

题目描述

如果你真的很想玩这个游戏,那么就先看看我的题目吧,搞不定这些的话是没办法通关的哟。第一关其实很简单,只有一个关闭的有密码锁的大门。这大门上写着一个奇怪的算式,估计是要你利用它算出密码来开门吧(果然是老掉牙的情节)。
传说中这个式子中的p和q是两个奇质数,等号右边算出来应该就是密码了吧,你是真的算不出来么?
\sum_{k=1}^{\frac{p-1}{2}} \left\lfloor \frac{kq}{p} \right\rfloor + \sum_{l=1}^{\frac{q-1}{2}} \left\lfloor \frac{lp}{q} \right\rfloor =

输入输出格式

输入格式:
只有一行,两个奇质数,分别表示p,q。

输出格式:
一个数,表示算式结果。

输入输出样例

输入样例#1:

5 7

输出样例#1:

6

说明

p,q在32位整型范围内。

题解

我们来观察一个\sum_{k=1}^{\frac{p-1}{2}} \left\lfloor \frac{kq}{p} \right\rfloor有什么意义。我们可以把它转化为在横坐标范围只有 \left\lfloor \frac{p}{2} \right\rfloor ,纵坐标范围只有 \left\lfloor \frac{q}{2} \right\rfloor 的坐标系中,在直线y = \frac{q}{p} x下方的坐标中不含0的整点数目。
分别考察本题加号两边的两项,可以发现第二项只是把第一项对应的坐标系旋转倒置了一下,其答案应该等于第一项,即该坐标系中的所有整点数。这个答案是\left\lfloor \frac{p}{2} \right\rfloor \left\lfloor \frac{q}{2} \right\rfloor
但是当p与q相等的时候,直线y=x上的整点被计算了两遍,即此时的答案应该是 \left\lfloor \frac{p}{2} \right\rfloor (\left\lfloor \frac{p}{2} \right\rfloor + 1)

代码

// Code by KSkun, 2018/6
#include <cstdio>
#include <cctype>

#include <algorithm>

typedef long long LL;

inline char fgc() {
    static char buf[100000], *p1 = buf, *p2 = buf;
    return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2)
        ? EOF : *p1++;
}

inline LL readint() {
    register LL res = 0, neg = 1; register char c = fgc();
    for(; !isdigit(c); c = fgc()) if(c == '-') neg = -1;
    for(; isdigit(c); c = fgc()) res = (res << 1) + (res << 3) + c - '0';
    return res * neg;
}

LL p, q;

int main() {
    p = readint(); q = readint();
    printf("%lld", (p / 2) * (q / 2) + (p == q ? p / 2 : 0));
    return 0;
}


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据