HDU - 6641 TDL(数学)
生活随笔
收集整理的這篇文章主要介紹了
HDU - 6641 TDL(数学)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Problem Description For a positive integer n, let's denote function f(n,m) as the m-th smallest integer x that x>n and gcd(x,n)=1. For example, f(5,1)=6 and f(5,5)=11.
You are given the value of m and (f(n,m)?n)⊕n, where ``⊕'' denotes the bitwise XOR operation. Please write a program to find the smallest positive integer n that (f(n,m)?n)⊕n=k, or determine it is impossible.
In each test case, there are two integers k,m(1≤k≤1018,1≤m≤100).
You are given the value of m and (f(n,m)?n)⊕n, where ``⊕'' denotes the bitwise XOR operation. Please write a program to find the smallest positive integer n that (f(n,m)?n)⊕n=k, or determine it is impossible.
?
Input The first line of the input contains an integer T(1≤T≤10), denoting the number of test cases.In each test case, there are two integers k,m(1≤k≤1018,1≤m≤100).
?
Output For each test case, print a single line containing an integer, denoting the smallest n. If there is no solution, output ``-1'' instead.?
Sample Input 2 3 5 6 100?
Sample Output 5 -1?
Source 2019 Multi-University Training Contest 6題解:
/// /// _ooOoo_ /// o8888888o /// 88" . "88 /// (| -_- |) /// O\ = /O /// ____/`---'\____ /// .' \\| |// `. /// / \\||| : |||// \ /// / _||||| -:- |||||- \ /// | | \\\ - /// | | /// | \_| ''\---/'' | | /// \ .-\__ `-` ___/-. / /// ___`. .' /--.--\ `. . __ /// ."" '< `.___\_<|>_/___.' >'"". /// | | : `- \`.;`\ _ /`;.`/ - ` : | | /// \ \ `-. \_ __\ /__ _/ .-` / / /// ======`-.____`-.___\_____/___.-`____.-'====== /// `=---=' /// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /// Buddha Bless, No Bug ! /// #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> #include <cstdlib> #include <queue> #include <stack> #include <vector> using namespace std; #define MAXN 100010 #define ll long longint t, m; ll k, ans_n;ll cal(ll n, int m) {if(n < 1)return 0;for(ll i = n + 1; ; i++)if(__gcd(n, i) == 1){m--;if(m == 0)return i - n;/// (i - n) = (f(n, m) - n) = d } }int main() {scanf("%d", &t);while(t--){scanf("%lld%d", &k, &m);ans_n = -1;for(int d = 1; d <= 1000; d++){if(cal(k ^ d, m) == d){if(ans_n == -1)ans_n = k ^ d;else if(ans_n > (d ^ k))/// ^ 運算的有優先度小于 < > == !=ans_n = k ^ d;}}printf("%lld\n", ans_n);}return 0; }?
轉載于:https://www.cnblogs.com/RootVount/p/11358647.html
總結
以上是生活随笔為你收集整理的HDU - 6641 TDL(数学)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2019牛客暑期多校训练营(第七场)A
- 下一篇: 查询数据表结构并查出结构的结构信息