小Q非常喜欢数学,但是他的口算能力非常弱。因此他找到了小T,给了小T一个长度为nn的正整数序列a1,a2,...,ana1,a2,...,an,要求小T抛出mm个问题以训练他的口算能力。

每个问题给出三个正整数l,r,dl,r,d,小Q需要通过口算快速判断al×al+1×...×ar−1×aral×al+1×...×ar−1×ar是不是dd的倍数。

小Q迅速地回答了出来,但是小T并不知道正确答案是什么,请写一个程序帮助小T计算这些问题的正确答案。

Input第一行包含一个正整数 T(1≤T≤10)T(1≤T≤10),表示测试数据的组数。

每组数据第一行包含两个正整数 n,m(1≤n,m≤100000)n,m(1≤n,m≤100000),分别表示序列长度以及问题个数。

第二行包含 nn个正整数 a1,a2,...,an(1≤ai≤100000)a1,a2,...,an(1≤ai≤100000),表示序列中的每个数。

接下来 mm行,每行三个正整数

l,r,d(1≤l≤r≤n,1≤d≤100000)l,r,d(1≤l≤r≤n,1≤d≤100000),表示每个问题。Output对于每个问题输出一行,若是倍数,输出Yes,否则输出No。Sample Input

1
5 4
6 4 7 2 5
1 2 24
1 3 18
2 5 17
3 5 35

Sample Output

Yes
No
No
Yes

题目大意:给出n个数,每次给出一个区间l,r,一个X问 a[l-r]相乘是不是X得倍数,询问次数较多

很容易想到质因数分解,然后再比较l,r之间的每个质因数的个数与X的每个质因数的个数相比较

如果x的一个质因数的个数>l到r里某个质因数的个数,肯定是不行的,具体实现起来不知道怎么实现

参考了网上的题解,大概写一下过程吧

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#define LL long long
using namespace std;
const int maxn=100005;
vector<int>G[maxn];
void work(int id,int k)//首先将输入的n个数进行质因数分解
{for(int i=2;i*i<=k;i++)//G[x]含有质因数x的下标{while(k%i==0){G[i].push_back(id);k/=i;}}if(k>1)G[k].push_back(id);//这里注意一下
}int query(int l,int r,int x)//下标是按照非严格递增排序的直接二分查找
{int t1=upper_bound(G[x].begin(),G[x].end(),r)-G[x].begin();int t2=lower_bound(G[x].begin(),G[x].end(),l)-G[x].begin();return t1-t2;
}void init()//这里可以只清空下标为质数的容器
{for(int i=0;i<maxn;i++){if(i&1==0)continue;G[i].clear();}
}int main()
{int cas;scanf("%d",&cas);while(cas--){int n,m,t;scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){scanf("%d",&t);work(i,t);}int l,r,f=0,tem;while(m--){scanf("%d%d%d",&l,&r,&tem);f=0;for(int j=2;j*j<=tem;j++)//对x质因数分解{int cnt=0;while(tem%j==0){cnt++;tem/=j;}
//                cout<<cnt<<" "<<t<<" "<<j<<endl;
//                cout<<"query"<<query(l,r,j)<<endl;if(cnt>query(l,r,j)){f=1;break;}}if(tem>1&&query(l,r,tem)==0)//这里判断tem本身是个质数{f=1;}if(f){printf("No\n");}else printf("Yes\n");}init();}return 0;
}
/*
G[2] 1 2 2 4
G[3] 1
G[5] 5
G[7] 7
注意:
upper_bound 是返回第一个大于val的位置不能等于而lowwer——bound 是返回第一个小于等于val的元素。

*/https://blog.csdn.net/ZscDst/article/details/80497236

口算训练 HDU - 6287相关推荐

  1. hdu 6287 口算训练(二分+质因数分解+思维)

    口算训练 Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java/Others) Total Sub ...

  2. python口算训练出题

    python口算训练出题 为了给妹妹出算数题,编了一个乘除法的出题代码,省去了许多时间 图片 obj=open(r"C:\Users\12483\Desktop\math.txt" ...

  3. HDU6287 口算训练(唯一分解定理+二分)

    口算训练 Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java/Others) Total Sub ...

  4. 口算训练java_提高孩子口算能力的5大方法,超实用!(附练习,可打印)

    原标题:提高孩子口算能力的5大方法,超实用!(附练习,可打印) 来源: 网络 编辑:成长园(id:czy6688990) 小编提醒 关注成长园,后台回复"1201" 即可获取打印版 ...

  5. pyhton的tkinter制作简易口算训练器

    前言 最近参加实习投递,发现好多家企业不管是什么岗位(研发or职能)都会考验到大家的数学能力 例如宝洁笔试直接就上了口算题,限时是真的紧张. 楼主不仅编程能力垃圾,数学能力也从小没有得到很好的锻炼(键 ...

  6. HDU - 6287 口算训练 (质因子分解 + 二分)

    题意:给一个序列,问 [l, r] 连续区间的乘积能否被 d 整除 思路:用 vector 记录每个质因子在序列中出现的位置,upper_bound(vec[p].begin(), vec[p].en ...

  7. CCPC2018女生赛口算训练6287

    #include <cstdio> #include <vector> #include <algorithm> #include <iostream> ...

  8. 口算训练-(2018-女生赛)(二分+唯一分解定理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6287 题意:给你n个数,每个数都很大; 有q次询问,让你判断一下从下标为: [L,R]的范围内 能否通 ...

  9. 用java编程100道问题//10弟弟的作业,口算训练

    弟弟的作业 题目描述 Rock的弟弟刚做完了"100以内数的加减法"这部分的作业,请你帮他检查一下.每道题目(包括弟弟的答案)的格式为a + b = c或者a – b = c,其中 ...

  10. 2021年中国大学生程序设计竞赛 女生专场 - 热身赛 Problem C. 口算训练(质因子分解)

    题目分析:判断 xxx 是 yyy 的倍数,等价于质因子分解后, yyy 中的每个质因子的出现次数都小于等于其在 xxx 中的出现次数. 那么对于每次询问 [l,r,d][l,r,d][l,r,d], ...

最新文章

  1. 小程序websocket java_微信小程序websocket java获取不到data
  2. 【洛谷】【动态规划/二维背包】P1855 榨取kkksc03
  3. 重构手法——提炼函数、搬移函数、以多态取代条件表达式
  4. matlab lyap,Matlab的Lyapunov、Sylvester和Riccati方程的Matlab求解
  5. OpenCV中神经网络的应用
  6. 江苏2021168查询高考成绩,重磅!高考成绩查询!!
  7. 什么是 CNC?什么是电脑锣?学 CNC主要学什么?
  8. tomcat6到tomcat9解压版(64位)随意下载
  9. macfee怎么生成释放代码_批处理应用:使用FLASHGET检查Mcafee SuperDat更新
  10. 转载 计算广告 03
  11. Niushop官网出新版 由内而外 玩转简约时尚风
  12. python 解析pdf矢量图_如何从PDF文件中提取矢量图
  13. 三星同时发展两种电视面板技术,围追堵截LG
  14. 【unbuntu gpt 硬盘的挂载方法】
  15. 职称计算机考试输入破折号,2015职称计算机考试Dreamweaver考前测试题及答案
  16. 头像哟(^U^)ノ~YO
  17. Games101计算机图形学入门基础之二:光栅化
  18. DAS、SAN、NAS三种存储方式的概念及应用
  19. XML是什么,它可以做什么?——写给XML入门者
  20. 湘大c语言期末考试试题及答案,湘大机房c语言试题.doc

热门文章

  1. YouTube视频设置水印
  2. 英语12种记忆单词的方法
  3. Dr.com校园网客户端故障解决方法
  4. 突破淘宝对于 selenium 检测
  5. uva 10098(全排列)
  6. 小码王python_小码王分享给Python初学者的几个技巧
  7. hdu 5211 Mutiple 数学
  8. 计算机备注用if函数怎么算,Excel中IF函数使用操作的设置技巧
  9. angular7.0+ngx-weui公众号开发,开发及框架搭建(一)
  10. 计算机睡眠和休眠哪个更好,电脑睡眠和休眠哪个好?电脑休眠和睡眠的区别介绍...