问题 A: 你们要的暴力
时间限制: 1 Sec 内存限制: 128 MB
题目描述:
已知某个数 x 的因子个数小于3个,那么称这个数 x 为good number。
现在给你一段区间 [L,R] ,问你区间内是否存在good number
区间[L,R]表示区间内元素为 L,L+1,L+2,。。。。R-1, R;
1<= L<=R <= 1e9,保证L和R的差值不超过500
输入:
多组数据,每组数据包含两个整数L和R表示区间 [L,R];
输出:
输出一行。
如果存在good number 输出 YES,否则输出 NO
样例输入:
7 8
8 9
样例输出
YES
NO
题解:本场比赛五个签到题中的一个,放在A题这个位置挺好的。 首先某个数 x 的因子个数小于3个,那就是说这个数是否为素数,我们过的判断是否为素数的复杂度为O( n \sqrt n n),n最大为1e9。我们先考虑这个题的数据范围L~R不超过500,因此最大复杂度为O(500 1 e 9 \sqrt {1e9} 1e9),复杂度可以接受。只要掌握素数的判断方法就好了。
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
bool check(int x){
for(int i = 2;i * i <= x;i++){
if(x % i == 0) return false;
}
return true;
}
int main(){
int l,r;
while(~scanf("%d %d",&l,&r)){
int flag = 0;
for(int i = l;i <= r;i++){
if(check(i)) flag = 1;
}
if(flag) puts("YES");
else puts("NO");
}
}
问题 B: 小胖的场外求救
时间限制: 1 Sec 内存限制: 512 MB
题目描述:
输入:
单组数据
输入A, B意思如上
接下来一行,输入Q,意思如上。
接下来Q行,每行一个n。
数据范围:
P = 1e9 + 7,A,B< 1e5,Q<=1e5,n<=1e8;
输出:
输出Q行,每行一个答案
样例输入:
2 1 2
1
2
样例输出:
1
3
题解:
这也是本场比赛五个签到题中的一个,来上过我们课的人都应该写出来了,这就是快速幂的裸题。按照公式写一个快速幂就完事了,注意取模完相见有可能会减出负数,记得取mod前先 + mod;
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
ll qpow(ll a,ll b){
ll res = 1;
while(b){
if(b & 1) res = res