私は、題し
第二に、分析
質問の意味は、$ nの$タイトル会うための式を見つけることです、それは$ -1 $を出力見つけることができません。
$$ {(F(N、M) - N)}の\ oplus {N} = K $$
(N、M)F $ためながら= {K} \ oplus {N} $、 - $(N F個(N、M)) - に見えるように変換することができるN $テーブルルックを果たし得る、それらの質量数密度に応じて、それを理解し小さな。
XORは、キャリーの添加およびので等価であるので、$ F (N - 、M )- N- $小さい、$ N- $ $ K $の同等に非常に近いです。
時間制限カード、非常にリラックスした列挙型の範囲が存在しないので列挙の$ n $、。
三、ACコード
1つの#include <ビット/ STDC ++ H> 2 3 使用して 名前空間STDを、 4 の#defineっ長い長い 5 の#define MIN(A、B)((A)>(B)?(B):( A)) 6 の#define MAX(A、B)((A)>(B)? (A):( B)) 7 8 LLのGCD(-1,11,11- b)は 9 { 10 リターン Bの== 0?A:GCD(B、%のB)。 11 } 12 13 LLのF(LL nを、int型M) 14 { 15 int型の CNT = 0 。 16 のために(LL I = N +1 ;; iは++ ) 17 { 18 であれば(GCD(I、N)== 1 ) 19 { 20 CNT ++ 。 21 } 22 であれば(CNT ==のM) 23 リターンI。 24 } 25 } 26 27 のint main()の 28 { 29 のint T。 30 のscanf(" %dの"、&T)。 31 一方(T-- ) 32 { 33 int型メートル。 34 LLのK、N。 35 のscanf(" %のLLD%dの"、&K&M)。 36 のための(N = MAX(1、K - 1000年); N <K + 1000年 ; N ++ ) 37 { 38 であれば(F(N、M) - N ==(K ^ n))を 39 ブレーク。 40 } 41 であれば、(N、K + == 1000 ) 42の プット(" -1 " )。 43 他の 44 のprintf(" %LLDする\ n " 、N)。 45 } 46 リターン 0 。 47 }