当前位置: 首页 > news >正文

AtCoder 259E LCM

题意:

以唯一分解形式给出nnn个数:
ai=pi,1ei,1pi,2ei,2...pi,tei,ta_{i}=p_{i,1}^{e_{i,1}}p_{i,2}^{e_{i,2}}...p_{i,t}^{e_{i,t}} ai=pi,1ei,1pi,2ei,2...pi,tei,t
现在可以将某个数改为111,求所有改法中,有多少个不同的lcm(a1,a2,...,an)lcm(a_{1},a_{2},...,a_{n})lcm(a1,a2,...,an)

Solution:

由于涉及lcmlcmlcm,不妨将各个数改写成这样的形式
a1=2e1,13e1,25e1,3.......an=2en,13en,25en,3....a_{1}=2^{e_{1,1}}3^{e_{1,2}}5^{e_{1,3}}.... \\ ... \\ a_{n}=2^{e_{n,1}}3^{e_{n,2}}5^{e_{n,3}}.... a1=2e1,13e1,25e1,3.......an=2en,13en,25en,3....
那么
lcm(a1,a2,...,an)=2max{e1,1,e2,1,...,en,1}3max{e1,2,e2,2,...,en,2}...lcm(a_{1},a_{2},...,a_{n})=2^{max\{e_{1,1},e_{2,1},...,e_{n,1}\}}3^{max\{e_{1,2},e_{2,2},...,e_{n,2}\}}... lcm(a1,a2,...,an)=2max{e1,1,e2,1,...,en,1}3max{e1,2,e2,2,...,en,2}...
考虑删掉一个数的影响,即将某个数aka_{k}ak设为1
ak=203050....a_{k}=2^{0}3^{0}5^{0}.... ak=203050....
对于一个质数底pk,ip_{k,i}pk,i,如果他的幂是nnn个数里同底的唯一最高次的话,删去他才会对lcmlcmlcm有影响,如果两个数的唯一最高次的底的构成是一样的,那么对这两个数的操作是等价的,于是考虑存在多少个不同的构成的数。

由于唯一分解内,不同的构成的乘积一定不同,于是可以用他们的乘积代表他们的构成,用一个map来指示这个底的最高次

底x的最高次幂=map1[x]
底x有多少个最高次幂=tot[x]

把他们的乘积加入set后,set的大小就是答案

#include<iostream>
#include<vector>
#include<cstdlib>
#include<numeric>
#include<unistd.h>
#include<queue>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<set>
#include<map>
#include<stack>
#include<utility>
#include<cctype>
#include<cassert>
#include<thread>
#include<bitset>
using namespace std;using ll=long long;
const int N=2e5+5,inf=0x3fffffff;
const long long INF=0x3fffffffffffffff,mod=1e11+7;int n;
vector<int>p[N],e[N];
map<int,int>map1,tot;int main() {#ifdef stdjudgefreopen("in.txt","r",stdin);auto TimeFlagFirst=clock();#endifstd::ios::sync_with_stdio(false);std::cin.tie(nullptr);cin>>n;for(int i=1;i<=n;i++) {int t; cin>>t;while(t--) {int pp,ee; cin>>pp>>ee;if(!map1.count(pp)) map1[pp]=ee,tot[pp]=1;else if(ee>map1[pp]) map1[pp]=ee,tot[pp]=1;else if(ee==map1[pp]) tot[pp]++;p[i].emplace_back(pp);e[i].emplace_back(ee);}}set<ll>set1;for(int i=1;i<=n;i++) {ll val=1;for(int j=0;j<p[i].size();j++) {if(e[i][j]==map1[p[i][j]]&&tot[p[i][j]]==1) val=val*p[i][j]%mod;}set1.insert(val);}cout<<set1.size()<<endl;#ifdef stdjudgefreopen("CON","r",stdin);std::cout<<std::endl<<"耗时:"<<std::clock()-TimeFlagFirst<<"ms"<<std::endl;std::cout<<std::flush;system("pause");#endifreturn 0;
}
http://www.lryc.cn/news/35201.html

相关文章:

  • MQTT协议-取消订阅和取消订阅确认
  • 90后小伙,用低代码“整顿”旅游业,年入2000万,他是怎么做到的?
  • C51---PWM 脉冲宽度调制
  • 毕业设计 基于51单片机WIFI智能家居系统设计
  • Nginx服务优化措施与配置防盗链
  • Java 某厂面试题真题合集
  • 很特别的5G市场,5.75亿部手机,却有11亿5G用户,这是怎么了?
  • go modules
  • Baklib客户故事:快递助手ERP
  • MongoDB学习(java版)
  • RK3568平台开发系列讲解(显示篇)什么是DRM
  • Python蓝桥杯训练:基本数据结构 [二叉树] 上
  • vuex基础之初始化功能、state、mutations、getters、模块化module的使用
  • WebSphere中间件漏洞总结
  • Unity之ASE实现影魔灵魂收集特效
  • 半入耳式耳机运动会不会掉、佩戴超稳固的运动耳机推荐
  • 使用Tensorflow完成一个简单的手写数字识别
  • OpenGL三种向着色器传递数据的方法 attributes,uniform,texture以及中间产物
  • 详解package.json和package-lock
  • 02-CSS
  • JavaScript 中的类型转换机制以及==和===的区别
  • RocketMQ基础篇(一)
  • Android前沿技术—gradle中的build script详解
  • 深入浅出PaddlePaddle函数——paddle.zeros_like
  • 物料-零部件分类属性
  • TypeError: cannot pickle ‘module‘ object
  • [MySQL索引]3.索引的底层原理(二)
  • JavaScript混淆——逆向思维的艺术
  • 数据库管理-第六十期 监听(20230309)
  • 概率论与数理统计相关知识