CodeForces - 1350C Orac and LCM(数论)
题目链接:点击查看
题目大意:给出 n 个数,先求出两两 lcm 后的集合 t ,再求这个集合 t 的 gcd
题目分析:做这个题得知道一个前置知识:对于 lcm 和 gcd 运算来说,每个质因子都相互独立
知道这个知识点后,对于每个数先质因子分解,对于某个质因子 p 而言,分三种情况讨论:
- 如果 p 在 n 个数中均出现过,那么找到指数的次小值 k,其贡献就是 p^k
- 如果 p 在 n - 1 个数中均出现过,那么找到指数的最小值 k,其贡献就是 p^k
- 如果 p 在 n 个数中的出现次数小于 n - 1 ,其贡献为 1
稍微解释一下,因为对于某个质因子 p 来说,如果先求 lcm 再求 gcd 的话,会给 gcd 造成影响的一定是指数最小的两个数所求出的 lcm,而指数最小的两个数所求出的 lcm 显然就是指数次小的那个数的指数了
其实情况 2 和情况 1 类似,只不过是将情况 1 中的第 n 个数的指数用 0 代替了而已,这也情况 2 中的最小值不就是情况 1 中的次小值了嘛
当 p 在任意两个数中的指数均为 0 时,此时次小值所代表的指数就是 0 了,贡献为 p^0 = 1,为了降低复杂度将其视为没有贡献即可
最后将所有质因子的贡献累乘起来就是答案了,注意结果需要开 long long 储存
代码:
#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=2e5+100;vector<int>p[N];void only(int n)
{for(int i=2;i*i<=n;i++){if(n%i==0){int cnt=0;while(n%i==0){cnt++;n/=i;}p[i].push_back(cnt);}}if(n!=1)p[n].push_back(1);
}LL q_pow(LL a,LL b)
{LL ans=1;while(b){if(b&1)ans*=a;a*=a;b>>=1;}return ans;
}int main()
{
#ifndef ONLINE_JUDGE
// freopen("input.txt","r",stdin);
// freopen("output.txt","w",stdout);
#endif
// ios::sync_with_stdio(false);int n;scanf("%d",&n);for(int i=1;i<=n;i++){int num;scanf("%d",&num);only(num);}LL ans=1;for(int i=1;i<N;i++){if(p[i].size()==n){sort(p[i].begin(),p[i].end());ans*=q_pow(i,max(p[i][0],p[i][1]));}if(p[i].size()==n-1){ans*=q_pow(i,*min_element(p[i].begin(),p[i].end()));}}printf("%lld\n",ans);return 0;
}
CodeForces - 1350C Orac and LCM(数论)相关推荐
- C. Orac and LCM(数论)
C. Orac and LCM(数论) 题目传送门 g 1 = g c d [ l c m ( a 1 , a 2 ) , l c m ( a 1 , a 3 ) - l c m ( a 1 , a ...
- C. Orac and LCM(数论lcm, gcd)
C. Orac and LCM 思路 题目非常简单,就是求gcd(lcm(i,j))foriinrange(n),forjinrange(n),i<jgcd(lcm_(i,\ j))\ for\ ...
- Orac and LCM(数论)
题目链接: Orac and LCM 大致题意: 给你一个长度为 n 的数组,求 gcd {lcm({ai , aj}) | i < j} 解题思路: gcd1=gcd[lcm(a1,a2),l ...
- Orac and LCM #641(div2) c题--求质因数次小指数
Orac and LCM cf地址 For the multiset of positive integers s={s1,s2,-,sk}, define the Greatest Common D ...
- 【Codeforces 1349A】Orac and LCM
思路 gcd1=gcd[lcm(a1,a2),lcm(a1,a3)-lcm(a1,an)]=gcd(a1,lcm(a2,a3-an)) gcd2=gcd[lcm(a2,a3),lcm(a2,a4)-l ...
- C. Orac and LCM(gcd与lcm的性质)
Problem - 1350C - Codeforces 题意: 对于正整数的多集合s={s1,s2,...,sk},定义s的最大公除数(GCD)和最小公倍数(LCM)如下. gcd(s)是最大的正整 ...
- C. Orac and LCM
链接:https://codeforces.ml/contest/1350/problem/C For the multiset of positive integers s={s1,s2,-,sk} ...
- Codeforces 955C Sad powers(数论)
Codeforces 955C Sad powers 题意 q组询问,每次询问给定L,R,求[L,R]区间内有多少个数可以写成ap的形式,其中a>0,p>1,1 ≤ L ≤ R ≤ 1e1 ...
- HDU - 4497 GCD and LCM 数论gcd
传送门 文章目录 题意: 思路: 题意: 给三个数的lcmlcmlcm和gcdgcdgcd,求满足条件的三元组组合个数. 思路: 首先lcmmodgcd==0lcm\bmod gcd==0lcmmod ...
最新文章
- python 常见的元字符(\d,\w ,^ ,$ 等) 的使用
- Vagrant安装指南
- Intellij IDEA神器常用技巧七-超好用插件推荐
- 功能性农业实用技术 谋定·农业大健康-李喜贵:粤黔东西协作
- tpp letter
- 线性代数之相似矩阵与二次型基础点
- VS2005调试时变慢解决办法
- bigquery数据类型_将BigQuery与TB数据一起使用后的成本和性能课程
- Go圈10月份优质博主推荐
- EntityFramework之迁移操作(五)
- hadoop的ACL权限
- FCKeditor配置和使用(转)
- Python 如何拆分数据集
- 恶意混时间你不敢管,却要吓唬全体员工?
- oracle ap tp是什么,AP模式和Router模式区别是什么
- Win10-Ubuntu双系统
- 简单屏幕录制截屏工具
- 自封的“IT民工”,程序员职业的畸形心理暗示
- 网易我的世界服务器配置文件翻译,精致存储的配置文件翻译 - [RS]精致存储 (Refined Storage) - MC百科|最大的Minecraft中文MOD百科...
- 我们如何一键识别?拍照识别植物的软件有哪些?