51nod 1434 区间LCM 素数

1434 区间LCM

题目来源: TopCoder

基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题

一个整数序列S的LCM(最小公倍数)是指最小的正整数X使得它是序列S中所有元素的倍数,那么LCM(S)=X。

例如,LCM(2)=2,LCM(4,6)=12,LCM(1,2,3,4,5)=60。

现 在给定一个整数N(1<=N<=1000000),需要找到一个整数M,满足M>N,同时LCM(1,2,3,4,...,N- 1,N) 整除 LCM(N+1,N+2,....,M-1,M),即LCM(N+1,N+2,....,M-1,M)是LCM(1,2,3,4,...,N-1,N) 的倍数.求最小的M值。

Input

多组测试数据,第一行一个整数T,表示测试数据数量,1<=T<=5
每组测试数据有相同的结构构成:
每组数据一行一个整数N,1<=N<=1000000。

Output

每组数据一行输出,即M的最小值。

Input示例

3
1
2
3

Output示例

2
4
6

思路:对于【1,N】区间的素数, 设为p1, p2, p3, ~,pn找到最小的c1和k1 使得 m >= c1*p1^k1 > n;result = max{c1*p1^k1, c2*p2^k2,~,cn*pn^kn};
 1 #include <iostream>
 2 #include <cstdio>
 3
 4 using namespace std;
 5 const int MAXN = 1e6;
 6 int prime[MAXN+10], num;
 7 bool a[MAXN+10];
 8
 9 void init(){
10     num = 0;
11     a[1] = false;
12     for(int i = 2; i <= MAXN; i++) a[i] = true;
13     for(int i = 2; i <= MAXN; i++){
14         if(a[i]){
15             prime[++num] = i;
16         }
17         for(int j = 1; j <= num; j++){
18             if(i*prime[j] > MAXN) break;
19             a[i*prime[j]] = false;
20             if(i%prime[j] == 0) break;
21         }
22     }
23 }
24 int slove(int n){
25     int res = 2;
26         for(int i = 1; prime[i] <= n && i <= num; i++){
27                 int sum = prime[i];
28                 while(sum <= n/prime[i]) sum *= prime[i];
29                 res= max(res, (n/sum + 1)*sum);
30         }
31     return res;
32 }
33 int main(){
34     int T, n;
35     init();
36     scanf("%d", &T);
37     while(T--){
38         scanf("%d", &n);
39         printf("%d\n", slove(n));
40     }
41     return 0;
42 }
				
时间: 2024-08-06 19:03:46

51nod 1434 区间LCM 素数的相关文章

51NOD 1434 区间LCM(素数筛)

传送门 1434 区间LCM 题目来源: TopCoder 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 一个整数序列S的LCM(最小公倍数)是指最小的正整数X使得它是序列S中所有元素的倍数,那么LCM(S)=X. 例如,LCM(2)=2,LCM(4,6)=12,LCM(1,2,3,4,5)=60. 现在给定一个整数N(1<=N<=1000000),需要找到一个整数M,满足M>N,同时LCM(1,2,3,4,-,N-1,N) 整除 LCM

51nod 1434 区间LCM (质因数分解)

分析:考虑从1到n所有数的质因数分解,记录每个质数的最高次数,同理从n+1循环到2n,如果循环到m时每个质因子的次数都不低于所记录的,则跳出循环,结果即为m.先预处理质数,复杂度为O(nlongn). 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<algorithm> 5 using namespace std; 6 const int maxn=1000005;

吉比特_笔试_区间内素数个数

import java.util.Scanner; /** 输入M.N,1 < M < N < 1000000,求区间[M,N]内的所有素数的个数.素数定义:除了1以外,只能被1和自己整除的自然数称为素数 输入描述: 两个整数M,N 输出描述: 区间内素数的个数 示例1 输入 2 10 输出 4 * @author zhaoz * */ public class getMtoNPrime { public static void getPrimeCount(int m, int n) {

[2016-05-09][51nod][1012 最小公倍数LCM]

时间:2016-05-09 18:53:56 星期一 题目编号:[2016-05-09][51nod][1012 最小公倍数LCM] 题目大意:求a和b的最小公倍数 #include<cstdio> using namespace std; typedef long long ll; ll gcd(ll a,ll b){ return b == 0 ? a : gcd(b ,a%b); } ll lcm(ll a,ll b){ return a / gcd(a,b) * b; } int ma

区间内素数的个数

2016.1.26 试题描述 给定两个正整数 a 和 b,请你统计区间 [a,b) 内有多少个素数. 输入 共一行包含两个正整数 a 和 b,用一个空格分隔开. 输出 一个数,表示所给区间内的素数的个数. 输入示例 22 37 输出示例 3  其他说明 数据范围:1≤ a < b ≤ 10^12 , b-a ≤ 10^7 .样例说明:有23. 29 和 31 共 3 个素数. 区间筛嘛~随便筛~就是当年写的代码比较难看?_? #include<iostream> #include<

poj 2689 Prime Distance(大区间筛素数)

http://poj.org/problem?id=2689 题意:给出一个大区间[L,U],分别求出该区间内连续的相差最小和相差最大的素数对. 因为L<U<=2147483647,直接筛素数是不行的,数组就开不了.但是可以根据素数筛的原理.我们先筛出sqrt(2147483647)以内的素数,然后拿这些素数去筛[L,U]之间的素数,即两次素数筛.但是L,U还是很大,但U-L<=1000000,所以进行区间平移,将[L,U]平移为[0,U-L],就能用数组放得下. #include &l

《挑战程序设计竞赛》 大区间内素数的个数

题意: 给一个区间边界值很大的区间,但是区间大小较小,求出该区间内所有质数个数. 知识补充: 因数枚举:分解一个数n,至于要从1 枚举到 n??√ 即可,然后把i和 n / i 当做因数加入vector 整数分解(把一个整数枚举出其质数基连乘的形式):从2开始枚举质数基,然后每次把该整数尽可能的被当前质数除去最大次数,这样该整数就会变小,极大减少枚举量.注意和map搭配使用,记录每一个质数的个数. 埃式素数筛法的复杂度是:Ologlogn看做线性也无妨. 求区间[a,b)内素数的个数,由于b的最

hdu4777 Rabbit Kingdom 树状数组+区间操作+素数打表

题目大意:给N个数,有M个查询,问区间[L,R]之间有多少个数与这个区间内的其他数都互质. 思路:dp显然很难搞,既然是求区间就试试每一个数最大可以对答案产生贡献的区间,即预处理出一个数在(lp,rp)内始终与其他数互质的最大区间 则lp和rp分别为左边和右边第一个与他不互质的数的位置 处理的时候素数打表然后从左到右始终更新对于某一个素因子出现的最右的位置然后更新l,r,可以做到 然后就是把查询按l从小到大排序,这样的话每处理一个新的查询,对于在这个查询的 l 左边的数就可以不用考虑了 然后我们

POJ2689 Prime Distance 区间筛素数

The branch of mathematics called number theory is about properties of numbers. One of the areas that has captured the interest of number theoreticians for thousands of years is the question of primality. A prime number is a number that is has no prop