【发布时间】:2015-10-09 06:54:06
【问题描述】:
我必须编写一个程序,以便为 L,R 类型的几个查询 我必须输出从 L 到 R 的数字的 LCM。 其中R可以最大到M
我设法编写了一个复杂度为 N(Q).M 的程序, 我需要在 N(Q).Log(M) 或 N(Q).sqrt(M) 中进行。
这里 N(Q) 表示没有查询。 sqrt 表示平方根。
编辑:我使用 Segmentree 编写了它,但是得到了错误的答案,这里 powf 在 logn time 中找到 a^b % P : 我的查询代码:
long long findfunc(long long ql,long long qr,long long ind)
{
if(a >qr || b<ql)
return 1;
if(a>=ql && b<=qr)
{ //cout<<"LCM "<<ql<<" to "<<qr<<" "<<val[ind]<<endl;
return val[ind]%mod;
}
else
{
ll vl= findfunc(ql,qr,2*ind+1);
ll vr= findfunc(ql,qr,2*ind+2);
return ( ((vl*vr)%mod) * powf(gcd(vl,vr),mod-2) )%mod;
}
}
【问题讨论】:
-
M 的限制是多少?
-
M 可以到 10^5,N(Q) 可以到 10^6
-
尝试学习
Segment Trees。 -
我已经知道了,但是对查询操作感到困惑
-
您是否只有获取 LCM 或更新项目查询?
标签: c++ algorithm primes prime-factoring