关闭

51NOD 1434 区间LCM(素数筛)

2947人阅读 评论(0) 收藏 举报
分类:

传送门

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
解题思路:

假设有质数K,可以求出t,使得K的t次方刚好小于等于m(K^t<=m)那么lcm(1,2,…,m)分解质因数中一定而且最多有t个质数K连乘,其实我们可以就是求的质数的最高次幂,这样就可以很快地吧lcm(1,2,…,m)分解质因数那么怎么把 lcm(n+1,n+2,…,m)分解质因数呢仍然假设质数K,可以求出最大的t,以及一个常数c(1<=c < K),使得 n+1<=c*K^t<=m
那么lcm(n+1,n+2,…,m)分解质因数中一定而且最多有t个质数K连乘。比如说质数3,n=16,m=22,可以求的c=2,t=2,即17<=2*3^2=18<=22,这样lcm(17,18,19,20,21,22)中最多有2个质数3连乘既然知道怎么求lcm(n+1,n+2,..,m)和lcm(1,2,..,m)了来探讨一下怎么求最小的m吧我们想让这两个lcm分解质因数后完全一样,也就是说连乘的质数个数也完全相等。也就是说,对于每个质数K都可以满足,存在c和最大的t 使得n+1<=c*K^t<=m对于大于n小于m的质数,我们假设是P,那么一定n+1<=P<=m,一定可以满足条件所以我们就只看小于等于n的质数就可以了因为要使每个小于N的质数K,都存在c和最大的t 使得n+1<=c*K^t<=m,我们枚举每一个质数,并求得c和t,使得刚好c*K^t>=n,
答案就取最大的c*K^t,即 max( c*K^t )这样lcm(1,2,…,m)和lcm(n+1,n+2,…,m)的分解质因数后均至少有t个质数K。如果最终m有 k^(t+1)<=m,那么这个K^(t+1)>n一定成立,故仍满足条件
代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
typedef long long LL;
const int MAXN = 1e6+5;
LL p[MAXN];
bool prime[MAXN];
int k;
void isprime()
{
    k = 0;
    memset(prime, 0, sizeof(prime));
    prime[0] = prime[1] = 1;
    for(LL i=2; i<MAXN; i++)
    {
        if(!prime[i])
        {
            p[k++] = i;
            for(LL j=i*i; j<MAXN; j+=i)
                prime[j] = 1;
        }
    }
}
int main()
{
    isprime();
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n;
        scanf("%d",&n);
        int ans = 2;
        for(int i=2; i<=n; i++)
        {
            if(!prime[i])///素数
            {
                int sum = i;
                while(sum <= n/i)
                    sum *= i;
                ans = max(ans, (n/sum+1)*sum);
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}
0
0
查看评论

51NOD 1434 区间LCM

1434 区间LCM 题目来源: TopCoder 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 一个整数序列S的LCM(最小公倍数)是指最小的正整数X使得它是序列S中所有元素的倍数,那么LCM(S)=X。 例如,LCM(2)=2,LCM(4,6)...
  • LuRiCheng
  • LuRiCheng
  • 2017-06-01 22:13
  • 149

51nod 1434 区间LCM

#include using namespace std; const int MaxPrimNum = 78499, MaxSize = 1000001, MaxSize1 = 31251; int MinPrime[MaxSize], MaxPrime[MaxSize]; int prime[...
  • liuxingwan
  • liuxingwan
  • 2015-09-23 11:14
  • 280

51nod 1434 区间LCM【数论】

题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1434题意:一个整数序列S的LCM(最小公倍数)是指最小的正整数X使得它是序列S中所有元素的倍数,那么LCM(S)=X。 例如,LCM(2)=2,LCM(4,6)=1...
  • hjt_fathomless
  • hjt_fathomless
  • 2017-03-02 17:00
  • 208

51nod 1434 数论区间LCM问题

题意: 一个整数序列S的LCM(最小公倍数)是指最小的正整数X使得它是序列S中所有元素的倍数,那么LCM(S)=X。 例如,LCM(2)=2,LCM(4,6)=12,LCM(1,2,3,4,5)=60。 现在给定一个整数N(1N,同时LCM(1,2,3,4,...,N-1,N) 整除 ...
  • liuyanfeier
  • liuyanfeier
  • 2016-01-23 16:45
  • 579

1434 区间LCM

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1434 这道题做完后才被人发现难以证明方法的正确性。最后证明方法的正确性转化为 证明质数存在定理:“[3/4n,n]区间里是否一定存在一个质数”。 只要这个命题对于充分大...
  • liuxingwan
  • liuxingwan
  • 2015-09-25 17:17
  • 304

51nod 2026 Gcd and Lcm

原题链接.题目大意:设f(n)=∑d|nμ(d)∗df(n) = \sum_{d|n}μ(d)*d。 求∑ni=1∑nj=1f(gcd(i,j))∗f(lcm(i,j))\sum_{i = 1}^n \sum_{j = 1}^n f(gcd(i, j)) * f(lcm(i, j)) 1<...
  • Cold_Chair
  • Cold_Chair
  • 2017-09-02 15:21
  • 306

POJ 2689 Prime Distance(素数区间筛法--经典题)

大致题意:给定[L,R]区间,找出区间内的每个素数 数据范围 : 1 R-L 1,000,000. R的数值太大,所以不能直接筛[0,R]的,要空间和时间优化,用到区间筛法,另外注意不能用int,因为R和L都是满int的,中间有很多细节处理会爆int的,还要注意1不是素数,所以在区间筛中要特判一下...
  • kalilili
  • kalilili
  • 2015-04-03 23:26
  • 1222

大数区间筛素数 线性

const int N=1000010; int prime[N], np; bool vis[N]; void get_prime(int l,int r) { np = 0; memset(vis, 0, sizeof(vis)); for (int i = 0; i &...
  • ehi11
  • ehi11
  • 2012-08-21 20:27
  • 931

[ACM] POJ 2689 Prime Distance (大区间素数筛选)

Prime Distance Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12811   Accepted: 3420 ...
  • sr19930829
  • sr19930829
  • 2014-11-12 12:11
  • 1570

51Nod-1810-连续区间

ACM模版描述题解这个题需要用到分治的思想,最最最重要的一个问题是,合法的连续区间有什么充要条件?这个不难想,某一个区间的最大值和最小值的差加一一定是这个区间的元素个数时才是合法的,因为题中说了,这是 1∼n1 \sim n 的排列,所以不存在重复,而每个相邻的又刚好差 11,那么很明显,上述条件一...
  • f_zyj
  • f_zyj
  • 2017-07-30 00:56
  • 295
    个人资料
    • 访问:527602次
    • 积分:11537
    • 等级:
    • 排名:第1588名
    • 原创:639篇
    • 转载:5篇
    • 译文:0篇
    • 评论:93条
    博客专栏