51NOD 1434 区间LCM(素数筛)
传送门 1434 区间LCM 假定有质数K,可以求出t,使得K的t次方恰好小于等于m(K^t<=m)那末lcm(1,m)分解质因数中1定而且最多有t个质数K连乘,其实我们可以就是求的质数的最高次幂,这样就能够很快地吧lcm(1,m)分解质因数那末怎样把 lcm(n+1,n+2,m)分解质因数呢依然假定质数K,可以求出最大的t,和1个常数c(1<=c < K),使得 n+1<=c*K^t<=m #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;
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |