班级网站建设组织机构融资平台
班级网站建设组织机构,融资平台,网站建设开发方式包括,专做律所网站题解#xff1a;判断d是否整除#xff0c;可以转化为求这段区间内d的因子的指数是否均大于d中的指数。容易想到把每个数字都分解为素因子形式#xff0c;对每个素数出现的次数求个前缀和即可。然而#xff0c;这样时间空间都不行。注意到对于一个数x#xff0c;小于sqrt(x… 题解判断d是否整除可以转化为求这段区间内d的因子的指数是否均大于d中的指数。容易想到把每个数字都分解为素因子形式对每个素数出现的次数求个前缀和即可。然而这样时间空间都不行。注意到对于一个数x小于sqrt(x)的素因子最多sqrt(x)个而每个数包含大于sqrt(x)的素因子最多一个。那么容易想到对于小于sqrt(x)的素因子预处理指数项前缀和。大于sqrt(n)的数提前分离出来只需实现区间查询一个数是否出现即可。这个操作直接分块预处理一下就好了。复杂度o(n×sqrt(n))大概一辈子都是签到选手了吧。 #include cstdio
#include algorithm
#include cstring
#include cmath
#include set
#define mem(MW) memset(MW,0,sizeof(MW))
#define rep(i,a,b) for(int ia;ib;i)
typedef long long ll;
const int N 1e5 100;
const int lim 320;
inline int read() {char cgetchar();int x0,f1;while(c0||c9){if(c-)f-1;cgetchar();}while(c0c9){xx*10c-0;cgetchar();}return x*f;
}
using namespace std;
int n, m, a[N];
int p[N], notp[N], nxt[N];
void init() {notp[1]1;nxt[1]1;rep(i,2,1e5) {if(!notp[i])p[p[0]]i,nxt[i]i;rep(j,1,p[0]) {if(p[j]*i1e5)break;notp[p[j]*i]1;nxt[p[j]*i]p[j];if(i%p[j]0)break;}}
}
int b[lim3][N], v[N], cnt, c[N], sum[N], sumc[N];
void cal_pr(int x) {cnt0;while(x!1) {int tnxt[x];v[cnt]t; sum[t]0;while(x%t0)x/t,sum[t];}
}
int belong[N], l[lim3], r[lim3], B, num, S[lim3][N];
void build() {mem(sumc), mem(b), mem(S);Bsqrt(n);numn/B;if(n%B)num;rep(i,1,n)belong[i](i-1)/B1;rep(i,1,num)l[i](i-1)*B1,r[i]i*B;r[num]n;rep(i,1,n) {cal_pr(a[i]);rep(j,1,cnt) {if(v[j]lim) b[v[j]][i]sum[v[j]];else S[belong[i]][v[j]]sum[v[j]];}c[i]v[cnt];sumc[i]sum[v[cnt]];}rep(j,1,lim)rep(i,2,n) b[j][i]b[j][i-1];
}
int fd(int L, int R, int x) {int tmp0;if(R-L1B) {rep(i,L,R) if(c[i]x) tmpsumc[i];return tmpsum[x];}rep(i,L,r[belong[L]]) if(c[i]x) tmpsumc[i];rep(i,belong[L]1,belong[R]-1) tmpS[i][x];rep(i,l[belong[R]],R) if(c[i]x) tmpsumc[i];return tmpsum[x];
}
int ck(int l, int r, int d) {int tmp-1;cal_pr(d);rep(i,1,cnt) {if(v[i]limb[v[i]][r]-b[v[i]][l-1]sum[v[i]]) return 0;if(v[i]lim) tmpv[i];}if(tmp-1) return 1;return fd(l,r,tmp);
}
int main() {int T;init();Tread();while(T--) {nread(), mread();rep(i,1,n) a[i]read();build();rep(i,1,m) {int l,r,d;lread(), rread(), dread();if(ck(l,r,d)) puts(Yes);else puts(No);}}return 0;
}转载于:https://www.cnblogs.com/RRRR-wys/p/9099627.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/85755.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!