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;
    }
  • 相关阅读:
    AtCoder Tenka1 Programmer Beginner Contest 解题报告
    BZOJ4401: 块的计数 思维题
    LOJ#2170. 「POI2011」木棍 Sticks
    LOJ#2632. 「BalticOI 2011 Day1」打开灯泡 Switch the Lamp On
    LuoguP3183 [HAOI2016]食物链 记忆化搜索
    BZOJ2818: Gcd 欧拉函数
    BZOJ3942: [Usaco2015 Feb]Censoring 栈+KMP
    适用于Java的嵌入式脚本语言
    oracle goldengate的两种用法
    手滑把库给删了,跑路前应该做的事。。。
  • 原文地址:https://www.cnblogs.com/RootVount/p/11358647.html
Copyright © 2011-2022 走看看