【XR-3】小道消息

链接:https://www.cometoj.com/contest/64/problem/B?problem_id=3516

题解:只要在m+1在(n+1)/2和(n+1)之间(左开右闭),且m+1是一个质数,则只需要一次即可,而其他情况的话则需两次(是赛场上得出的结论)

#include
#include
#include
#include
#include 
#include
#include
#include 
#include
#include 
#define INF 0x3f3f3f3f
#define lowbit(a) ((a)&-(a))
#define speed std::ios::sync_with_stdio(false),cin.tie(NULL),cout.tie(NULL)
using namespace std;
typedef long long ll;
queue<int> q;
stack<int> s;
priority_queue<int> pq;  
const int maxn = 100005;
ll n,m,l,r;
ll ans=0;
int main()
{
 cin>>n>>m;
 ll flag=1;
 r=n+1;
 l=r/2;
 m+=1;
 if(n==2){
  cout<<"1\n";
  return 0;
 }
 if(m>l&&m<=r){
  for(ll i=2;i*i<=m;i++){
   if(m%i==0){
    flag=0;
   }
  }
  if(flag)
   cout<<"1\n";
  else
   cout<<"2\n";
 }
 else
  cout<<"2\n";
} 

你可能感兴趣的:(数学+思维)