题解【洛谷P5436】【XR-2】缘分

题目背景

世间万物都置身于缘分编织的大网中。缘分未到,虽历经千劫,却不能相遇。缘分到了,在草原上都能等到一艘船。——《一禅小和尚》

题目描述

一禅希望知道他和师父之间的缘分大小。可是如何才能知道呢?

一禅想了个办法,他先和师父约定一个正整数 \(n\),接着他们各自在心里想一个不超过 \(n\) 的正整数。

一禅认为,他和师父心里想的这两个数的最小公倍数越大,则意味着他和师父之间的缘分越大。

师父觉得这个办法很合适,不过他想知道这两个数的最小公倍数最大会是多少。

师父的数学不太好,于是问一禅。一禅也觉得这个问题很困难,他希望你能告诉他答案。

输入输出格式

输入格式

本题有多组数据。

第一行一个正整数 \(T\),表示数据组数。

接下来的 \(T\) 行,每行一个正整数 \(n\),表示一禅和师父约定的正整数。

输出格式

对每组数据,一行一个正整数,表示答案。

输入输出样例

输入样例#1

1
3

输出样例#1

6

说明

【样例 \(1\) 说明】

不超过 \(3\) 的两个正整数的最小公倍数的最大值为 \(\mathrm{lcm}(2,3) = 6\)

【数据规模与约定】

\(50\%\) 的数据,\(1 \le T,n \le 100\)

\(100\%\) 的数据,\(1 \le T \le 100, 1 \le n \le 10^9\)

题解

一道简单的数学题。

很容易知道,\(n\)\(n-1\)是互质的。

而互质的两数的\(\mathrm{lcm}\)就是两数的乘积。

有两个要注意的点:

  1. 最后答案会超出\(int\),需要开\(long\) \(long\)
  2. 注意特判\(n=1\)时,答案为\(1\)

代码

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <cctype>
#define int long long

using namespace std;

inline int gi()
{
    int f = 1, x = 0; char c = getchar();
    while (c < '0' || c > '9') { if (c == '-') f = -1; c = getchar();}
    while (c >= '0' && c <= '9') { x = x * 10 + c - '0'; c = getchar();}
    return f * x;
}

int t, n;

signed main()
{
	cin >> t;
	while (t--)
	{
		cin >> n;
		if (n == 1) cout << 1 << endl;//特判
		else cout << n * (n - 1) << endl;//输出两个数的乘积
	}
	return 0;
}
posted @ 2019-07-01 16:10  csxsi  阅读(255)  评论(0编辑  收藏  举报