题解 —— AtCoder Regular Contest 110 —— A"/>
AtCoder题解 —— AtCoder Regular Contest 110 —— A
题目相关
题目链接
AtCoder Regular Contest 110 A 题,。
Problem Statement
We have an integer N.
Print an integer x between N and (inclusive) such that, for every integer y between 2 and N (inclusive), the remainder when x is divided by y is 1 .
Under the constraints of this problem, there is always at least one such integer x.
Input
Input is given from Standard Input in the following format:
N
Output
Print an integer x between N and (inclusive) such that, for every integer y between 2 and N (inclusive), the remainder when x is divided by y is 1.
If there are multiple such integers, any of them will be accepted.
Samples1
Sample Input 1
3
Sample Output 1
7
Explaination
The remainder when 7 is divided by 2 is 1, and the remainder when 7 is divided by 3 is 1, too.
7 is an integer between 3 and , so this is a desirable output.
Samples2
Sample Input 2
10
Sample Output 2
39916801
Constraints
- All values in input are integers.
- 2≤N≤30
题解报告
题目翻译
有一个整数 N。给出一个整数 x,,要求每一个整数 ,x 对 y 的余数都是 1。请找出这个 x。
题目分析
又是一个友善的打卡数学题。阅读题目后,我们知道就是一个找 2, 3, ..., N 的最小公倍数,然后将这个数据加一即可。
数据范围估计
,因此需要使用 long long 来表示。
也正是因为 ,如果我们使用暴力枚举的方法,即枚举 这个范围,将导致 TLE,因为数据太大了。
AC 代码
//
//A - Redundant Redundancy
#include <bits/stdc++.h>using namespace std;//如果提交到OJ,不要定义 __LOCAL
//#define __LOCALtypedef long long LL;const LL MAXX=1e13;int main() {
#ifndef __LOCAL//这部分代码需要提交到OJ,本地调试不使用ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#endifLL n;cin>>n;LL x=2;for (LL y=x+1; y<=n; y++) {LL t=__gcd(x, y);x=x/t*y;}cout<<x+1<<"\n";#ifdef __LOCAL//这部分代码不需要提交到OJ,本地调试使用system("pause");
#endifreturn 0;
}
注意一个小细节,求 LCM 的时候,我们先除以 GCD,再乘。这样的目的是为了防止数据越界。
时间复杂度
O(N)。
空间复杂度
O(1)。
更多推荐
AtCoder题解 —— AtCoder Regular Contest 110 —— A
发布评论