这里附上题目链接:CF937B Vile Grasshoppers。
~~手动分割~~
题目
思路解析
先从[2,y]
中去掉[2,p]
的一倍,这样一来,只需要考虑从区间(p,y]
(左开右闭)去掉[2,p]
的倍数(从2倍开始)。
1.倒搜
- 从y开始倒搜到p+1,判断是否存在某数不为
[2,p]
的倍数。只要找到,立即输出。这样就能保证解是最大的。 - 不存在则输出-1。
AC代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
int p,y;
bool sign=true;//sign=1表示存在符合要求的最大值
int main()
{
int i,j;
//输入数据
scanf("%d%d",&p,&y);
//
for(i=y;i>p;i--)
{
sign=true;
for(j=2;j<=p&&(j*j<=i);++j)
{
if(!(i%j))//若j能整除i
{
sign=false;
break;
}
}
if(sign)
{
printf("%d",i);
return 0;
}
}
printf("-1");
return 0;
}