【数论】C.Orac and LCM

摘要:
C、 OralandLCM主题:给定一个长度的数组,解决方案是:对于,数组的最大公因子,因为每个都包含一个公因子,所以必须的因子可以降为相同,答案可以表示为#include<iostream>usingspacestd;组分最大值=3e5+10;类型deflonglongLL;LLgcd{returnb?gcd:a;}LLlcm{returna*b/gcd(a,b);}LLa[maxn],suf[maxn';Intmain(){LLn,ans=0;cin˃˃n;forcin˃˃a[i];forsuf[i]=gcd;//后缀//用于在gcd_1=lcm中查找gcdforans=gcd

C.Orac and LCM

题意:给定一个长度为(n)的数组,求(gcd{{lcm(a_i,a_j)|i<j}})

思路:

对于(a_1),其产生的(lcm)(lcm(a_1,a_2)、lcm(a_1,a_3)、...lcm(a_1,a_n))

则它们的最大公因数(gcd_1=gcd(lcm(a_1,a_2)、lcm(a_1,a_3)、..lcm(a_1,a_n)))

由于它们中的每一项都含有公因子(a_1),故(a_1)必为(gcd_1)的因子

那么可化简为(gcd_1=lcm(a_1,gcd(a_2,a_3,...a_n)))

以此类推,可得(gcd_2,gcd_3....gcd_n)

那么答案可表示为 (gcd(gcd_1,gcd_2,...gcd_n))

#include<iostream>
using namespace std;
const int maxn = 3e5 + 10;
typedef long long LL;
LL gcd(LL a, LL b) {return b ? gcd(b, a % b) : a;}
LL lcm(LL a, LL b) {return a * b / gcd(a, b);}
LL a[maxn], suf[maxn];
int main()
{
	LL n, ans = 0;
	cin >> n;
	for (int i = 1; i <= n; i++) cin >> a[i];
	for (int i = n; i >= 1; i--) suf[i] = gcd(suf[i + 1], a[i]);
	//后缀
	//用来求gcd_1=lcm(a_1,gcd(a_2,a_3...a_n))中的gcd(a_2,a_3...a_n)
	for (int i = 1; i <= n; i++) ans = gcd(ans, lcm(a[i], suf[i + 1]));
	//反复更新答案来求gcd(gcd_1,gcd_2,...gcd_n)
	cout << ans << endl;
	return 0;
}

免责声明:文章转载自《【数论】C.Orac and LCM》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇持久层框架:MyBatis 3.2(1)Mastering-Spark-SQL学习笔记02 SparkSession下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

HDU 2503 (数论,最大公约数)

a/b + c/d Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 14895    Accepted Submission(s): 7761 Problem Description 给你2个分数,...

iOS开发——面试篇&amp;amp;面试总结(五)取消GCD任务

取消GCD任务 在NSOperationQueue中,我们可以随时取消已经设定要准备执行的任务(当然,已经开始的任务就无法阻止了),而GCD没法停止已经加入queue的block(其实是有的,但需要许多复杂的代码);GCD原生并不支持取消操作。 
dispatch_suspend函数也只能暂停开启新的未执行的block,已经处于执行中的block是无法暂停...

封装GCD以及介绍如何使用

源码地址 http://pan.baidu.com/s/1zTUR8 研究GCD有一段时间,翻译了多篇文章,找了很多的资料,看了很多官方文档,看起来很难,实际上很简单,本人一一进行讲解怎么使用. 支持ARC以及非ARC,无论在ARC环境还是在非ARC环境,都需要调用dispatchRelease方法来释放init出的GCDGroup,GCDQueue,G...

iOS开发之多线程

1、多线程概念 进程 正在进行中的程序被称为进程,负责程序运行的内存分配。每一个进程都有自己独立的虚拟内存空间。  线程 线程是进程中一个独立的执行路径(控制单元) 一个进程中至少包含一条线程,即主线程 可以将耗时的执行路径(如:网络请求)放在其他线程中执行 创建线程的目的就是为了开启一条新的执行路径,运行指定的代码,与主线程中的代码实现同时运行。 栈区:...

洛谷网课数论

老久以前的了,以前忘放上面了(差点丢了/jk) 目录 欧拉筛素数 同余 辗转相除法证明 exgcd 中国剩余定理 扩展CRT 乘法逆元 欧拉函数 康托展开 卢卡斯定理/Lucas 定理 欧拉筛素数 (O(n))筛法 for(int i = 2; i <= n; i++) { if(vis[i] == 0) pre[tot++] =...

2019中国大学生程序设计竞赛(CCPC)

目录 Contest Info Solutions A - & B - array C - K-th occurrence D - path E - huntian oy F - Shuffle Card G - Windows Of CCPC H - Fishing Master Contest Info [Practice Li...