input

样例个数T           <=10000

每个样例一个n(2<=n<=10^8)

output

lcm(1,2,...,n)%2^32

Sample Input

5
10
5
200
15
20

Sample Output

2520
60
2300527488
360360
232792560 做法:质因分解,每个不大于n的质数不大于n的最高次幂相乘结果即为lcm(1,2,...,n)的结果
 #include <bits/stdc++.h>
#define MAX 10000
#define INF 100000000
#define LL long long
#define U unsigned
using namespace std;
int cas=,T;
U int prime[],pn,*r,rn,*rr,n,*rrp;
struct node
{
U int x,y;
bool operator<(const node&a)const
{
return x>a.x;
}
};
/*void init() //TLE
{
pn=1;
bool *vis=new bool[INF+10];
priority_queue<node>q;
for(int i=2;i<=MAX;i++)
if(!vis[i])
{
for(int j=i*i;j<=INF;j+=i) vis[j]=1;
q.push(node{i,i});
}
prime[0]=1;
for(U int i=MAX+1,x=1;i<=INF;i++)
{
if(!vis[i]) prime[pn++]=i;
}
prime[pn++]=INF+10;
delete []vis;
r=new U int[pn+10];
r[0]=1;
for(int i=1;i<pn;i++) r[i]=r[i-1]*prime[i];
U int res=1;
rr=new U int[3000];
rrp=new U int[3000];
rr[0]=rrp[0]=1;
rn=1;
while(!q.empty())
{
node u=q.top();q.pop();
rrp[rn]=u.x;
rr[rn++]=res*u.y;
if((U LL)u.x*u.y<=INF) q.push(node{u.x*u.y,u.y});
}
rrp[rn++]=INF+10;
for(int i=1;i<rn;i++) rr[i]=rr[i-1]*rr[i];
}
*/
void init() //最大数为10000^2,则大于10000的素数最小公倍数的最大次幂为1,小于一万时不定
{
bool *vis=new bool[INF+];
pn=;
for(U int i=;i<=INF;i++) //O(n)筛法
{
if(!vis[i]) prime[pn++]=i;
for(U int j=;j<pn&&i*prime[j]<=INF;j++)
{
vis[i*prime[j]]=;
if(i%prime[j]==) break;
}
}
delete []vis; //内存不足,用完即删
priority_queue<node>q;
r=new U int[pn];
for(int i=;i<pn;i++) //prime存质数,r存第i个质数对应的结果(还没算1~10000的部分)
{
if(prime[i]<=MAX) { r[i]=;q.push(node{prime[i],prime[i]}); }
else r[i]=r[i-]*prime[i];
}
U int res=;
rr=new U int[];
rrp=new U int[];
rr[]=rrp[]=;
rn=;
while(!q.empty()) //rr存质数的幂次升序,rrp存底数
{
node u=q.top();q.pop();
rrp[rn]=u.x;
rr[rn++]=res*u.y;
if((U LL)u.x*u.y<=INF) q.push(node{u.x*u.y,u.y});
}
rrp[rn++]=INF+;
for(int i=;i<rn;i++) rr[i]=rr[i-]*rr[i]; //将rrp乘起来作为1~10000的结果
}
int main()
{
//printf("%d\n",sizeof(vis)+sizeof(prime));
init();
// for(int i=0;i<rn;i++) printf("%u %u\n",rrp[i],rr[i]);
//freopen("1.in","w",stdout);
//freopen("1.in","r",stdin);
//freopen("1.out","w",stdout);
//printf("time=%.3lf",(double)clock()/CLOCKS_PER_SEC);
scanf("%d",&T);
while(T--)
{
scanf("%u",&n);
int i1=upper_bound(prime,prime+pn,n)--prime; //查找>10000的结果
int i2=upper_bound(rrp,rrp+rn,n)--rrp; //查找1~10000的结果
printf("%u\n",r[i1] * rr[i2]);
}
delete []r;
delete []rrp;
delete []rr;
return ;
}

ACdream 1732的更多相关文章

  1. ACdream 1214---矩阵连乘

    ACdream 1214---矩阵连乘 Problem Description You might have noticed that there is the new fashion among r ...

  2. 矩阵乘法快速幂 codevs 1732 Fibonacci数列 2

    1732 Fibonacci数列 2  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 在“ ...

  3. acdream.LCM Challenge(数学推导)

     LCM Challenge Time Limit:1000MS     Memory Limit:64000KB     64bit IO Format:%lld & %llu Submit ...

  4. acdream.Triangles(数学推导)

    Triangles Time Limit:1000MS     Memory Limit:64000KB     64bit IO Format:%lld & %llu Submit Stat ...

  5. acdream.A Very Easy Triangle Counting Game(数学推导)

    A - A Very Easy Triangle Counting Game Time Limit:1000MS     Memory Limit:64000KB     64bit IO Forma ...

  6. acdream.Bet(数学推导)

    Bet Time Limit:1000MS     Memory Limit:64000KB     64bit IO Format:%lld & %llu Submit Status Pra ...

  7. acdream.郭式树(数学推导)

    郭式树 Time Limit:2000MS     Memory Limit:128000KB     64bit IO Format:%lld & %llu Submit Status Pr ...

  8. ACdream 1188 Read Phone Number (字符串大模拟)

    Read Phone Number Time Limit:1000MS     Memory Limit:64000KB     64bit IO Format:%lld & %llu Sub ...

  9. ACdream 1195 Sudoku Checker (数独)

    Sudoku Checker Time Limit:1000MS     Memory Limit:64000KB     64bit IO Format:%lld & %llu Submit ...

随机推荐

  1. enode框架step by step之框架要实现的目标的分析思路剖析1

    enode框架step by step之框架要实现的目标的分析思路剖析1 enode框架系列step by step文章系列索引: 分享一个基于DDD以及事件驱动架构(EDA)的应用开发框架enode ...

  2. Citrix 服务器虚拟化之四 Xenserver资源池

    Citrix 服务器虚拟化之四  Xenserver资源池 台主机,尽管这种限制没有执行.池总是至少有一个物理节点,称为主.只有主节点公开管理界面(使用XenCenter和XenServer命令行界面 ...

  3. 黑马程序员:Java基础总结----GUI&网络&IO综合开发

    黑马程序员:Java基础总结 GUI&网络&IO综合开发   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 网络架构 C/S:Client/Server ...

  4. 机器学习实战kNN之手写识别

    kNN算法算是机器学习入门级绝佳的素材.书上是这样诠释的:“存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都有标签,即我们知道样本集中每一条数据与所属分类的对应关系.输入没有标签的新数据 ...

  5. MarkDown/reST 文档发布流水线

    相信很多朋友都在使用Markdown或者restructuredText格式来编写一些技术文档,也会把这些文档放在github上分享给社区.GitHub提供了很好的Markdown格式解析支持,但是这 ...

  6. Python爬虫小白入门(五)PhatomJS+Selenium第二篇

    一.前言 前文介绍了PhatomJS 和Selenium 的用法,工具准备完毕,我们来看看如何使用它们来改造我们之前写的小爬虫. 我们的目的是模拟页面下拉到底部,然后页面会刷出新的内容,每次会加载10 ...

  7. 当我们在谈论kmeans(3)

        本系列意在长期连载分享,内容上可能也会有所删改: 因此如果转载,请务必保留源地址,非常感谢! 博客园:http://www.cnblogs.com/data-miner/(暂时公式显示有问题) ...

  8. Windows 8 卡在正在检查更新

    原文地址:https://answers.microsoft.com/en-us/windows/forum/windows_8-update/windows-update-not-updating- ...

  9. Threejs基础学习【修改版】

    一. Three.js官网及使用Three.js必备的三个条件 1.Three.js 官网 https://threejs.org/ 2.使用Three.js必备的三个条件(To actually b ...

  10. css学习笔记1

    :before,:after伪元素 伪元素特性(目前已经遇到的) 它不存在于文档中,所以js无法操作它 它属于主元素本身,有些伪类仅仅是代表元素内容的一部分,譬如:first-letter代表第一个字 ...