n个数的最大公约、最小公倍数

 1 #include <cstdio>
 2 #include <cstring>
 3 using namespace std;
 4 #define N 1010
 5
 6 //两个数的最大公约数和最小公倍数
 7 __int64 Gcd(__int64 a, __int64 b)
 8 {
 9     if(b==0)
10         return a;
11     return Gcd(b, a%b);
12 }
13
14 __int64 Lcm(__int64 a, __int64 b)
15 {
16     return a/Gcd(a, b)*b;
17 }
18
19 //n个数的最大公约数和最小公倍数
20 __int64 nGcd(__int64 *a, int n)
21 {
22     if(n==1)
23         return *a;
24     return Gcd(a[n-1], nGcd(a, n-1));
25 }
26 __int64 nLcm(__int64 *a, int n)
27 {
28     if(n==1)
29         return *a;
30     return Lcm(a[n-1], nLcm(a, n-1));
31 }
32 int main()
33 {
34     int t;
35     __int64 a[N], n;
36     scanf("%d", &t);
37     while(t--)
38     {
39         scanf("%I64d", &n);
40         for(int i=0; i<n; i++)
41             scanf("%I64d", a+i);
42         __int64 tp = nLcm(a, n);
43         printf("%I64d\n",tp);
44     }
45 }
时间: 2024-10-05 18:32:49

n个数的最大公约、最小公倍数的相关文章

蓝桥杯 核桃的数量 (三个数以上的最小公倍数)

问题描述 小张是软件项目经理,他带领3个开发组.工期紧,今天都在加班呢.为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑).他的要求是: 1. 各组的核桃数量必须相同 2. 各组内必须能平分核桃(当然是不能打碎的) 3. 尽量提供满足1,2条件的最小数量(节约闹革命嘛) 输入格式 输入包含三个正整数a, b, c,表示每个组正在加班的人数,用空格分开(a,b,c<30) 输出格式 输出一个正整数,表示每袋核桃的数量. 样例输入1 2 4 5 样例输出1 20 样例输入2 3 1 1 样例输出

n个数的最大公约数和最小公倍数

Po主刚刚考完计算概论....心情低落... 好气啊..昨天看到这题了...今天还是脑子一团浆糊....TAT 总结一发,吸取教训!努力学习!! //题目描述: 第一行输入,n 第二行输入n个数,输出这n个数的最大公约数和最小公倍数. 先求两个数的公因数. 辗转相除法原理:假设我们要求的是x和y的最大公约数(x>y),x可以表示为x=ay+b,那么x和y的公约数c也必能整除b,即x和y的公约数和y和b的公约数是相同的,若一直取除数和余数作为新的x和y,直到y是x的因数,此时y就是最大公约数(最大

web版四则运算

题目:实现网页上的四则运算练习 设计思路:(整数为例)首先首页为选择做题的类型,用单选框进行选择,之后跳转到相应的页面进行题目规范的输入,例如:最大最小值,输入后进行提交,确认输入的信息无误,如果有误跳回页面,无误后转入出题页面,出一道题写一道题的答案,之后用session进行答案等的保存,将值传入到判断正误的页面,对输出正确,错输出错误和正确结果,题目全部做完进行结果的查看,点击返回主页,则返回到主页.主要是各种值得保存和调用,还有输入规范的判断.(分数和带括号的式子同理). 源代码: cho

js 3

一.while循环 每一次执行完语句块后,又会跳回去检查小括号里面的布尔值,如果为true,那么又会执行语句块一次 例: while(true){consle.log("hello")} 这个代码运用了while循环,却是出现了死循环. (注:在JS中千万不能有死循环出现,死循环会无限地循环下去,会使浏览器崩溃,电脑死机) 1.例子:求1+2+3+4+5···+100=? ? var s = 0; var i = 1; while (i<=100){ s=s+i;i++;} co

蓝桥杯 历届试题-核桃的数量

历届试题-核桃的数量 问题描述 小张是软件项目经理,他带领3个开发组.工期紧,今天都在加班呢.为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑).他的要求是: 1. 各组的核桃数量必须相同 2. 各组内必须能平分核桃(当然是不能打碎的) 3. 尽量提供满足1,2条件的最小数量(节约闹革命嘛) 输入格式 输入包含三个正整数a, b, c,表示每个组正在加班的人数,用空格分开(a,b,c<30) 输出格式 输出一个正整数,表示每袋核桃的数量. 样例输入1   2 4 5 样例输出1 20 样例输

HDOJ-1019 Least Common Multiple

http://acm.hdu.edu.cn/showproblem.php?pid=1019 题意:给出n个数,求它们的最小公倍数 对于n个数,它们的最小公倍数等于[前n-1个数的最小公倍数和第n个数]的最小公倍数 而前n-1个数的最小公倍数又等于[前n-2个数的最小公倍数和第n-1个数]的最小公倍数 以此类推.. 所以,从第1和第2个数开始依次求出最小公倍数,然后迭代即可 # include <stdio.h> int a, n, Result; int Gcd(int x, int y)

HDU 4497 GCD and LCM (数学,质数分解)

题意:给定G,L,分别是三个数最大公因数和最小公倍数,问你能找出多少对. 析:数学题,当时就想错了,就没找出规律,思路是这样的. 首先G和L有公因数,就是G,所以就可以用L除以G,然后只要找从1-(n=L/G),即可,那么可以进行质因数分解,假设: n = p1^t1*p2^t2*p3^t3;那么x, y, z,除以G后一定是这样的. x = p1^i1*p2^i2*p3^i3; y = p1^j1*p2^j2*p3^j3; z = p1^k1*p2^k2*p3^k3; 那么我们可以知道,i1,

置换群题目汇总

首先介绍一下什么是置换群,不说一些繁琐的概念. 首先给你一个序列,假如: s = {1 2 3 4 5 6} 然后给你一个变换规则 t = {6 3 4 2 1 5} 就是每一次按照t规则变换下去 比如这样 第一次:6 3 4 2 1 5 第二次:5 4 2 3 6 1 第三次:1 2 3 4 5 6 发现经过几次会变换回去,在变换下去就是循环的了,这就是一个置换群. 我们可以这样表示一个置换群,比如按照上面变化规则 1->6->5->1 那么这些是一个轮换 2->3->4-

2017网易秋招编程集合

CPP http://blog.csdn.net/achiberx/article/details/74058208 [编程题]回文序列 如果一个数字序列逆置之后跟原序列是一样的就称这样的数字序列为回文序列.例如:{1, 2, 1}, {15, 78, 78, 15} , {112} 是回文序列, {1, 2, 2}, {15, 78, 87, 51} ,{112, 2, 11} 不是回文序列.现在给出一个数字序列,允许使用一种转换操作:选择任意两个相邻的数,然后从序列移除这两个数,并用这两个数