Comet OJ

Comet OJ - Contest #9 & X Round 3B
其实这个题我一开始,完全⑧会.
题目里给了个关于素数的定理,就考虑一下素数在这题里扮演什么样的角色.
然后你发现,如果他第(0)天告诉了一个素数,那么只需要一天所有人就都知道了.
如果是一个合数,那么第一天所有素数会知道消息,第二天所有人就都知道了.
需要注意的是,要考虑它第(0)天告诉一个素数时,如果这个素数的倍数也在这个区间内,是需要两天的.
(Code:)

#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <string>
#include <vector>
#include <queue>
#include <cmath>
#include <ctime>
#include <map>
#include <set>
#define MEM(x,y) memset ( x , y , sizeof ( x ) )
#define rep(i,a,b) for (int i = a ; i <= b ; ++ i)
#define per(i,a,b) for (int i = a ; i >= b ; -- i)
#define pii pair < int , int >
#define X first
#define Y second
#define rint read<int>
#define int long long
#define pb push_back

using std::set ;
using std::pair ;
using std::max ;
using std::min ;
using std::priority_queue ;
using std::vector ;

template < class T >
    inline T read () {
        T x = 0 , f = 1 ; char ch = getchar () ;
        while ( ch < '0' || ch > '9' ) {
            if ( ch == '-' ) f = - 1 ;
            ch = getchar () ;
        }
        while ( ch >= '0' && ch <= '9' ) {
            x = ( x << 3 ) + ( x << 1 ) + ( ch - 48 ) ;
            ch = getchar () ;
       }
   return f * x ;
}

int n , k ;

inline bool check (int x) {
    if ( x == 1 ) return false ;
    for (int i = 2 ; i * i <= x ; ++ i) if( x % i == 0 ) return false ;
    return true ;
}

signed main (int argc , char * argv[] ) {
    n = rint () ; k = rint () ;
    if ( n == 2 ) puts ("1") ;
    else if ( check ( k + 1 ) ) {
        if ( ( ( k + 1 ) << 1 ) <= n + 1 ) puts ("2") ;
        else puts ("1") ;
    }
    else puts ("2") ;
    system ("pause") ; return 0 ;
}
May you return with a young heart after years of fighting.
原文地址:https://www.cnblogs.com/Equinox-Flower/p/11416052.html