1434 区间LCM
多组测试数据,第一行一个整数T,表示测试数据数量,1<=T<=5
每组测试数据有相同的结构构成:
每组数据一行一个整数N,1<=N<=1000000。
每组数据一行输出,即M的最小值。
3
1
2
3
2
4
6
保证[1,N]区间每个质数的指数最大值在[N+1,M]间至少出现一次。
1 #include<iostream>
2 #include<algorithm>
3 #include<queue>
4 #include<set>
5 #include<math.h>
6 #include<stdlib.h>
7 #include<stdio.h>
8 #include<string.h>
9 using namespace std;
10 bool prime[1000005];
11 int ans[100000];
12 int ak[1000005];
13 typedef long long LL;
14 int main(void)
15 {
16 memset(prime,0,sizeof(prime));
17 for(int i = 2; i <= 1000; i++)
18 {
19 if(!prime[i])
20 {
21 for(int j = i; (i*j) <= 1000000 ; j++)
22 {
23 prime[i*j] = true;
24 }
25 }
26 }
27 int cn = 0;
28 for(int i = 2; i < 1000000; i++)
29 {
30 if(!prime[i])
31 ans[cn++] = i;
32 }
33 int T;
34 scanf("%d",&T);
35 while(T--)
36 {
37 int n;
38 scanf("%d",&n);
39 if(n == 1)printf("2\n");
40 else if(n==2)printf("4\n");
41 else if(n==3)printf("6\n");
42 else
43 {
44 fill(ak,ak+1000000,1);
45 int maxx = 0;
46 for(int i = 0; i < cn ; i++)
47 {
48 if(ans[i] > n)
49 {
50 maxx = i-1;
51 break;
52 }
53 int k = 1;
54 int t = 0;
55 while(k<=n)
56 {
57 ak[ans[i]] = max(ak[ans[i]],k) ;
58 k*=ans[i];
59 }
60 }if(maxx == 0) maxx = cn;
61 maxx = min(maxx,cn);
62 LL x = n;
63 LL akk = x;
64 for(int i = 0; i <= maxx; i++)
65 {
66 if(ak[ans[i]]>1)
67 {
68 LL xx= (x)/ak[ans[i]];
69 if(xx*ak[ans[i]] <= x)
70 {
71 xx++;
72 }
73 akk = max(akk,xx*ak[ans[i]]);
74 }
75 }
76 printf("%lld\n",akk);
77 }
78 }
79 return 0;
80 }
1434 区间LCM的更多相关文章
- 51nod 1434 理解lcm
1434 区间LCM 题目来源: TopCoder 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 一个整数序列S的LCM(最小公倍数)是指最小的正 ...
- 51nod1434 区间LCM
将n!标准分解.m!/n!必定需要包含n!的分解式.对于每个质数枚举最小的答案,然后总的取最大. #include<cstdio> #include<cstring> #inc ...
- NOIP2018提高组金牌训练营——数论专题
地址 https://www.51nod.com/live/liveDescription.html#!liveId=23 1187 寻找分数 给出 a,b,c,d, 找一个分数p/q,使得a/b & ...
- 【倍增】LCM QUERY
给一个序列,每次给一个长度l,问长度为l的区间中lcm最小的. 题解:因为ai<60,所以以某个点为左端点的区间的lcm只有最多60种的情况,而且相同的lcm区间的连续的. 所以就想到一个n*6 ...
- HDU3579:Hello Kiki(解一元线性同余方程组)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3579 题目解析:求一元线性同余方程组的最小解X,需要注意的是如果X等于0,需要加上方程组通解的整数区间lc ...
- 51nod部分容斥题解
51nod1434 区间LCM 跟容斥没有关系.首先可以确定的一个结论是:对于任意正整数,有1*2*...*n | (k+1)*(k+2)*...*(k+n).因为这就是$C_{n+k}^{k}$. ...
- 【题解】51nod 1203JZPLCM问题
这题好强强啊,貌似是集训队原题?集训队原题当中值域是1e9的范围,这样各种乱搞是妥妥的不能过了,只能写正解的离线+树状数组维护前缀积. 最开始我写了几种乱搞做法,包括莫队和线段树做法.其中表现比较优秀 ...
- 【JZOJ4860】【NOIP2016提高A组集训第7场11.4】分解数
题目描述 Dpstr学习了动态规划的技巧以后,对数的分解问题十分感兴趣. Dpstr用此过程将一个正整数x分解成若干个数的乘积:一开始令集合A中只有一个元素x,每次分解时从A中取一个元素a并找出两个大 ...
- SPOJ LGLOVE 7488 LCM GCD Love (区间更新,预处理出LCM(1,2,...,n))
题目连接:http://www.spoj.com/problems/LGLOVE/ 题意:给出n个初始序列a[1],a[2],...,a[n],b[i]表示LCM(1,2,3,...,a[i]),即1 ...
随机推荐
- absorb
absorb 物理的absorb比较直观.被书本/知识absorb也好理解.涉及到money/time时有点抽象,但汉语也有"吸金"的说法,consume, use up.可以吸收 ...
- Python3的类注意事项
参考: https://www.runoob.com/python/python-object.html https://www.runoob.com/w3cnote/python-extends-i ...
- Android Bitmap 全面解析(一)加载大尺寸图片
压缩原因:1.imageview大小如果是200*300那么加载个2000*3000的图片到内存中显然是浪费可耻滴行为;2.最重要的是图片过大时直接加载原图会造成OOM异常(out of memory ...
- [项目总结]怎么获取TextView行数,为什么TextView获取行数为0?
1 final TextView textView = new TextView(this); 2 ViewTreeObserver viewTreeObserver = textView.getVi ...
- android 调用相机拍照及相册
调用系统相机拍照: private Button btnDyxj; private ImageView img1; private File tempFile; btnDyxj = (Button) ...
- OpenStack之八: network服务(端口9696)
注意此处用的一个网络,暂时不用启动第二个网官网地址 https://docs.openstack.org/neutron/stein/install/controller-install-rdo.ht ...
- 【Linux】【Services】【SaaS】Docker+kubernetes(7. 安装Docker私有镜像仓库)
1. 简介 1.1. 自己做个私有镜像,方便上传和下载,我也在docker官网注册了一个账号,做好的镜像可以传上去 1.2. Redhat自带私有镜像的功能,需要安装包,这是howto: https: ...
- MQTT协议 - arduino ESP32 通过精灵一号 MQTT Broker 进行通讯的代码详解
前言 之前研究了一段时间的 COAP 协议结果爱智那边没有测试工具,然后 arduino 也没有找到合适的库,我懒癌发作也懒得修这库,就只能非常尴尬先暂时放一放了.不过我在 爱智APP -> 设 ...
- 联盛德 HLK-W806 (十): 在 CDK IDE开发环境中使用WM-SDK-W806
目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...
- 工作簿合并(Excel代码集团)
同一文件夹内N个工作簿 ,每个工作簿里N个工作表,最终合并到一个工作表里的代码. 假设每个表格结构相同,第一行为标题,第二行为表头,表头内容固定,行数不固定,列固定14,工作表数量不固定,工作簿数量不 ...