题目链接:点击查看

题目大意:给出 n 个数,先求出两两 lcm 后的集合 t ,再求这个集合 t 的 gcd

题目分析:做这个题得知道一个前置知识:对于 lcm 和 gcd 运算来说,每个质因子都相互独立

知道这个知识点后,对于每个数先质因子分解,对于某个质因子 p 而言,分三种情况讨论:

  1. 如果 p 在 n 个数中均出现过,那么找到指数的次小值 k,其贡献就是 p^k
  2. 如果 p 在 n - 1 个数中均出现过,那么找到指数的最小值 k,其贡献就是 p^k
  3. 如果 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(数论)相关推荐

  1. 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 ...

  2. C. Orac and LCM(数论lcm, gcd)

    C. Orac and LCM 思路 题目非常简单,就是求gcd(lcm(i,j))foriinrange(n),forjinrange(n),i<jgcd(lcm_(i,\ j))\ for\ ...

  3. Orac and LCM(数论)

    题目链接: Orac and LCM 大致题意: 给你一个长度为 n 的数组,求 gcd {lcm({ai , aj}) | i < j} 解题思路: gcd1=gcd[lcm(a1,a2),l ...

  4. 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 ...

  5. 【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 ...

  6. C. Orac and LCM(gcd与lcm的性质)

    Problem - 1350C - Codeforces 题意: 对于正整数的多集合s={s1,s2,...,sk},定义s的最大公除数(GCD)和最小公倍数(LCM)如下. gcd(s)是最大的正整 ...

  7. C. Orac and LCM

    链接:https://codeforces.ml/contest/1350/problem/C For the multiset of positive integers s={s1,s2,-,sk} ...

  8. Codeforces 955C Sad powers(数论)

    Codeforces 955C Sad powers 题意 q组询问,每次询问给定L,R,求[L,R]区间内有多少个数可以写成ap的形式,其中a>0,p>1,1 ≤ L ≤ R ≤ 1e1 ...

  9. HDU - 4497 GCD and LCM 数论gcd

    传送门 文章目录 题意: 思路: 题意: 给三个数的lcmlcmlcm和gcdgcdgcd,求满足条件的三元组组合个数. 思路: 首先lcmmodgcd==0lcm\bmod gcd==0lcmmod ...

最新文章

  1. python 常见的元字符(\d,\w ,^ ,$ 等) 的使用
  2. Vagrant安装指南
  3. Intellij IDEA神器常用技巧七-超好用插件推荐
  4. 功能性农业实用技术 谋定·农业大健康-李喜贵:粤黔东西协作
  5. tpp letter
  6. 线性代数之相似矩阵与二次型基础点
  7. VS2005调试时变慢解决办法
  8. bigquery数据类型_将BigQuery与TB数据一起使用后的成本和性能课程
  9. Go圈10月份优质博主推荐
  10. EntityFramework之迁移操作(五)
  11. hadoop的ACL权限
  12. FCKeditor配置和使用(转)
  13. Python 如何拆分数据集
  14. 恶意混时间你不敢管,却要吓唬全体员工?
  15. oracle ap tp是什么,AP模式和Router模式区别是什么
  16. Win10-Ubuntu双系统
  17. 简单屏幕录制截屏工具
  18. 自封的“IT民工”,程序员职业的畸形心理暗示
  19. 网易我的世界服务器配置文件翻译,精致存储的配置文件翻译 - [RS]精致存储 (Refined Storage) - MC百科|最大的Minecraft中文MOD百科...
  20. 我们如何一键识别?拍照识别植物的软件有哪些?

热门文章

  1. Spring什么是复杂对象
  2. Kubernetes-Label
  3. Quartz框架中的Scheduler
  4. 深入理解条件过滤Conditional
  5. Redis中的Cluster总结
  6. 用户user空间和内核kernel空间
  7. SpringMVC的请求-文件上传-多文件上传的代码实现
  8. 对象的反序列化流_ObjectInputStream
  9. Linux下清理内存和Cache方法 /proc/sys/vm/drop_caches
  10. Redis实现分布式锁释放锁