질문의 의미 :
가장 작은 N을 찾아 F (N, M)이 K = 주어진 n보다 크고, m 번째 소수 N (N F (m) -N) 배타적 n 및 m을 설정
해결 방법 :
주어진 m 들어, k 번째 주위 N 정당한 분배 매우 치밀하므로 강력한 K 이웃 됨.
사용법 #include <iostream> #DEFINE LL 긴 긴 사용 스페이스 성병; LL의 GCD (LL A, LL의 b) { 복귀 ㄴ == 0 A : GCD (B, A의 % B); } BOOL (LL의 N, LL k를 해결 의 INT {m)를 // 找到N后面的个互质m第 LL 레지스터 I; 대 (I = N + 1 ; I ++ ) { 경우 (GCD (I, N) == 1 ) M-- ; 경우 (m을 == 0 ) 휴식 ; } 경우 (((==) ^ N)에서 {K) // 의 printf ( "%의 LLD"I); 반환 1 ; } 다른 반환 0 ; } INT 의 main () { INT의 t; scanf와 ( " %의 D " , t); 반면 (t-- ) { LL의 K; INT의 m; scanf와 ( " %의 LLD % d에 " , & k, m); 대해 (LL 레지스터 I = 최대 (1ll, K- 3000 ) 나 <= K + 3000 ; I ++ ) { 경우 (해결 (I, K, m)) { 의 printf ( " % LLD \ 없음 " , I); 고토 ; } } 의 printf ( " -1 가능 \ n " ); 에이:; } }