問題の説明
正の整数のための
N、の関数を表すものとF (N 、Mを)としてM番目の最小の整数X 、X > NおよびGCD (X 、N )= 1。例えば、F (5が、1 )= 6、およびF (5 、5 )= 11。
あなたは、の値が与えられているメートルと(fは(N 、M )- N )⊕ N ``、 ⊕ ''ビット単位のXOR演算を表します。最小の正の整数を見つけるためのプログラムを書いてください Nその(F (N 、M )- N )⊕ N = Kを、又はそれが不可能であるかを決定。
あなたは、の値が与えられているメートルと(fは(N 、M )- N )⊕ N ``、 ⊕ ''ビット単位のXOR演算を表します。最小の正の整数を見つけるためのプログラムを書いてください Nその(F (N 、M )- N )⊕ N = Kを、又はそれが不可能であるかを決定。
入力
入力の最初の行は整数含ま
T (1 ≤ T ≤ 10 )テストケースの数を表します。
各テストケースでは、二つの整数が存在するkは、M (1 ≤ K ≤ 10 18 、1 ≤ M ≤ 100 )。
各テストケースでは、二つの整数が存在するkは、M (1 ≤ K ≤ 10 18 、1 ≤ M ≤ 100 )。
出力
各テストケースのために、最小表す整数を含む単一の行を印刷
Nを。解決策、出力``存在しない場合は-1「」の代わりに。
サンプル入力
2 3 5 6 100
サンプル出力
5 -1
ソース
ソリューション:
/// /// _ooOoo_ /// o8888888o /// 88" 88。」 /// (| -_- |) /// O \ = / O /// ____ / `--- '\ ____ / // 」\\ | | // `。 /// / \\ ||| :||| // \ /// / _ ||||| - : - ||||| - \ /// | | \\\ - /// | | /// | \ _ | '' \ --- / '' | | /// \ .- \ __ `-` ___ / - 。/ /// ___ `。。」/--.-- \ `。。__ /// 。 "" ' < `.___ \ _ <|> _ / ___。' > ' ""。 /// | | 。: ` - \`; `\ _ /`;.`/ - `:| | /// \ \ ` - 。\ _ __ \ / __ _ /。、 `/ / /// ======` `-.____ -.___ \ _____ / ___.-` ____.- "====== /// `= --- =」 /// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ /// 仏祝福、ノーバグ! /// する#include <iostreamの> の#include <cstdioを> する#include < 書式#include <CStringの> の#include <cmath> の#include <cstdlib> 書式#include <キュー> の#include <スタック> の#include <ベクトル> 使用して 名前空間はstd; #define MAXN 100010 の#defineっ長い長いint型のT、M。 LL kを、ans_n。 LL CAL(LL N、int型M) { 場合(N < 1 ) 戻り0 ; 用(LL I = N + 1 ; iは++ ) 場合(__gcd(N、I)== 1 ) { M - 。 もし(M == 0 ) リターン I - N。/// (I - N)=(F(N、M) - n)は= D } } int型のmain() { scanf関数(" %のD "、&T)。 一方、(t-- ) { scanf関数(" %のLLD%dの"、&K&M)。 ans_n = - 1 。 用(int型、D = 1 ; D <= 1000年 ; D ++ ) { IF(CAL(K ^ D、M)== D) { IF(ans_n == - 1 ) ans_n = K ^ D; 他 IF(ans_n>(K ^ D))/// ^動作が優先されより小さい<> == =! ans_n = K ^ D; } } のprintf(" %LLDの\のN- " 、ans_n); } 戻り 0 ; }