算法训练 最大最小公倍数(及N数据类型设置问题)

  • Post author:
  • Post category:其他


问题描述

已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。

输入格式

输入一个正整数N。

输出格式

输出一个整数,表示你找到的最小公倍数。

样例输入

9

样例输出

504

数据规模与约定

1 <= N <= 106。

tips:关于N类型问题,虽然1 <= n <= 10^6但是仍要设置为ll

例如 (本人理解是 电脑会自己优先计算n * n的值 然后n * n会溢出int范围,故也需要把n设为long long int范围),我就栽在这里了   0,0

(至于 分析过程,大家借鉴一下其他人的博客吧 嘻嘻  本人比较懒)

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

int main()
{
	ll ans1 = 0;
	int n = 1000000;
	ans1 = n*n;
	cout<<ans1<<endl;
	cout<<"ans1会超出范围"<<endl; 
	
	ll ans2 = 0;
	ll n = 1000000;//也要定义成long long int 
	ans2 = n*n;
	cout<<ans2;
	cout<<"ans2不会超出范围"<<endl; 

	return 0;
 } 
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

int main()
{
	ll ans = 0;
	ll n;//虽然1 <= n <= 10^6但是仍要设置为ll
	cin>>n;
	if(n <3 )  {//如果n小于3,则选三个数一定会出现重复的数,他们的最大最小公倍数就是n本身(自己可以试试看)
		cout<<n;
		return 0;
	}
	if(n % 2 != 0)
	ans = n*(n-1)*(n-2);
	else if(n % 3 != 0)
	ans = n*(n-1)*(n-3);
	else ans = (n - 3)*(n-1)*(n-2);
	cout<<ans;
	
	return 0;
 } 



版权声明:本文为intmain_S原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。