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;
    }
  • 相关阅读:
    深度学习模型训练之偏差与方差
    介绍一个快速确定神经网络模型中各层矩阵维度的方法
    TensorFlow简要教程及线性回归算法示例
    Web项目开发中常见安全问题及防范
    时序数据库及应用场景简介
    互联网产品怎么做数据埋点
    简述分布式跟踪系统实现原理
    MFC- socket 编程
    win32 socket 编程(六)——UDP
    win32 socket编程(五)——客户端实例(TCP)
  • 原文地址:https://www.cnblogs.com/RootVount/p/11358647.html
Copyright © 2011-2022 走看看