zoukankan      html  css  js  c++  java
  • HDU

    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.
     
    Input
    The first line of the input contains an integer T(1T10), denoting the number of test cases.

    In each test case, there are two integers k,m(1k1018,1m100).
     
    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

    题解:

    (f(n,m)-n)igoplus n = k

    d = f(n,m)-n

    d = nigoplus k

    n = digoplus k

    ///
    ///                            _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 long
    
    int 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
    ", ans_n);
        }
        return 0;
    }
  • 相关阅读:
    【Spring】注解的循环依赖问题
    【网络】计算机网络自顶向下读书笔记
    【JUC】并发编程的艺术笔记
    【JUC】多线程手撕代码面试题
    【操作系统】王道操作系统全盘汇总
    【Spring】IoC源码分析以及实现
    【Spring】用例子来初次理解IoC
    拼音工具类
    chr(10)与chr(13)的区别
    List 集合转String 逗号拼接
  • 原文地址:https://www.cnblogs.com/RootVount/p/11358647.html
Copyright © 2011-2022 走看看