资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。
输入格式
输入一个正整数N。
输出格式
输出一个整数,表示你找到的最小公倍数。
样例输入
9
样例输出
504
数据规模与约定
1 <= N <= 106。
思路:
1.开始直接3个for循环的时候,运行超时
import math
maxn=0
N=int(input())
for i in range(1,N+1):
for j in range(1,N+1):
if i!=j:
num1=(i*j)//math.gcd(i,j)
for k in range(1,N+1):
if j!=k and i!=k:
num2=(k*num1)//math.gcd(k,num1)
num2=max(num2,maxn)
print(num2)
找规律
从1到10开始找规律,基本上这些数都能概括成这个规律
1 1
2 2
3 3 2 1
4 4 3 1 3 2 1
5 5 4 3
6 6 5 4 6 5 3 5 4 3
7 7 6 5
8 8 7 6 8 7 5
9 9 8 7
10 10 9 8 10 9 7
代码如下:
def check():
N=int(input())
if N==1:
return 1
elif N==2:
return 2
elif N==3:
return 6
elif N>3:
if (N%2!=0 and N%3!=0) or (N%2!=0 and N%3==0):
return N*(N-1)*(N-2)
elif(N%2==0 and N%3==0):
return (N-1)*(N-2)*(N-3)
elif(N%2==0 and N%3!=0):
return N*(N-1)*(N-3)
print(check())