小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

思路

l--r每个数相乘是d的倍数,只需要l--r之间每个数的因数选择一些乘起来是d或d的倍数就可以啦

但是如果一般的储存查找还是会超时,那么用一个vector存因子x出现的所有坐标i,每次二分查找就节约很多时间

每输入一个x,将它分解因子,存入vector,然后询问的时候将d分解,对每一个因子查找在l--r之间出现的个数,如果小于

自然不可能。。注意,分解的时候要注意素数的情况

转载自o#(这里、这里)#o

代码——同样转载

#include <bits/stdc++.h>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
#define pb push_back
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> P;
const int INF = 0x3f3f3f3f;
const int maxn = 1e5+5;
const int mod = 1e9+7;
const double eps = 1e-8;
const double pi = asin(1.0)*2;
const double e = 2.718281828459;
void fre() {freopen("in.txt", "r", stdin);//freopen("out.txt", "w", stdout);
}int t;
int n, m;
vector<int> G[maxn];int query(int l, int r, int x) {return upper_bound(G[x].begin(), G[x].end(), r) - lower_bound(G[x].begin(), G[x].end(), l);
}bool solve(int l, int r, int d) {for (int i = 2; i * i <= d; ++i){if (d % i == 0){int cnt = 0;while (d % i == 0){cnt++;d /= i;}if (cnt > query(l, r, i)){return 0;}}}if (d > 1){if (query(l, r, d) < 1){return 0;}}return 1;
}int main(){//fre();scanf("%d", &t);for (int Case = 1; Case <= t; ++Case){if (Case != 1){for (int i = 0; i < maxn; ++i){G[i].clear();}}scanf("%d%d", &n, &m);for (int i = 1, x; i <= n; ++i){scanf("%d", &x);for (int j = 2; j * j <= x; ++j){while (x % j == 0){x /= j;G[j].pb(i);}}if (x > 1){G[x].pb(i);}}while (m--){int l, r, d;scanf("%d%d%d", &l, &r, &d);puts(solve(l, r, d) ? "Yes" : "No");}}return 0;
}

自己又敲了一遍,一遍过,很舒服~不得不说这个代码思路很清晰,我印象很深

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<ll> G[100005];int query(ll l,ll r,ll x)
{return upper_bound(G[x].begin(),G[x].end(),r)-lower_bound(G[x].begin(),G[x].end(),l);
}int solve(ll l,ll r,ll d)
{for(ll i=2;i*i<=d;i++){if(d%i==0){ll cnt = 0;while(d%i==0)cnt++,d/=i;if(cnt>query(l,r,i))return 0;}}if(d>1 && query(l,r,d)<1)return 0;return 1;
}int main()
{int t;scanf("%d",&t);while(t--){for(int i=0;i<100005;i++)G[i].clear();ll m,n,x;scanf("%lld%lld",&n,&m);for(int i=1;i<=n;i++){scanf("%lld",&x);for(ll j=2;j*j<=x;j++){if(x%j==0){while(x%j==0){G[j].push_back(i);x/=j;}}}if(x>1)G[x].push_back(i);}ll l,r,d;for(int i=0;i<m;i++){scanf("%lld%lld%lld",&l,&r,&d);printf("%s\n",solve(l,r,d)?"Yes":"No");}}return 0;
}

hdu-6287-口算训练相关推荐

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

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

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

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

  3. python口算训练出题

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

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

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

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

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

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

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

  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. python flask 设置 header 响应体、响应头、状态码
  2. 十五、Redis三种特殊类型之二HyperLoglog
  3. WCF 第十二章 对等网
  4. 数据包过滤 系统 linux,Ubuntu16.04安装libpcap开发库对pcap文件中的数据包进行过滤...
  5. java普通类跳转到jsp_JSP跳转到Servlet的两种配置
  6. 基于Xml 的IOC 容器-载入配置路径
  7. c#去掉html样式,C# 清除HTML格式
  8. 宏转录组方法_高级转录组分析和R语言数据可视化第十二期 (线上线下同时开课)...
  9. Python-OpenCV快速教程
  10. vim学习、各类插件配置与安装【转】
  11. 2018年python工作好找吗-2018年IT行业薪资大揭秘:你拖后腿了吗?
  12. 怎样才算精通javascript
  13. FPGA杂记5——格雷码转换设计
  14. DDIA - 第5章 数据复制
  15. debian linux上usb摄像头,[Debian] 安装USB摄像头(芯片ZC0301)驱动
  16. Spring boot 搭建个人博客系统(六)——文章点击量和阅读排行榜
  17. C# 获得%ProgramData% 路径
  18. 【python】Python语言程序设计/嵩天老师入门课程笔记整理
  19. allergro音乐术语什么意思_音乐术语大全
  20. BK05-蓝鲸智云-标准部署-关键模块逐步操作

热门文章

  1. hdu 1728:逃离迷宫
  2. 如何防止亚马逊账户关联?
  3. win10计算机磁盘图标,win10系统如何更换硬盘图标_Win10更换磁盘图标的详细步骤...
  4. macbookpro2011安装单系统win10
  5. proposal中文翻译_PROPOSAL 是什么意思_ PROPOSAL 的翻译_音标_读音_用法_例句_爱词霸在线词典...
  6. PHP 8.1性能基准测试结果出炉,比7.0版本提升44%
  7. 基于WDF框架的PCIE驱动设计
  8. elasticsearch报错:exceeds the [index.highlight.max_analyzed_offset] limit [1000000]
  9. Chrome 配置samesite=none方式
  10. html语言的特殊符号,特殊符号