zoukankan      html  css  js  c++  java
  • 1406: [AHOI2007]密码箱

    1406: [AHOI2007]密码箱

    Time Limit: 5 Sec  Memory Limit: 64 MB
    Submit: 1591  Solved: 944
    [Submit][Status][Discuss]

    Description

    在一次偶然的情况下,小可可得到了一个密码箱,听说里面藏着一份古代流传下来的藏宝图,只要能破解密码就能打开箱子,而箱子背面刻着的古代图标,就是对密码的提示。经过艰苦的破译,小可可发现,这些图标表示一个数以及这个数与密码的关系。假设这个数是n,密码为x,那么可以得到如下表述: 密码x大于等于0,且小于n,而x的平方除以n,得到的余数为1。 小可可知道满足上述条件的x可能不止一个,所以一定要把所有满足条件的x计算出来,密码肯定就在其中。计算的过程是很艰苦的,你能否编写一个程序来帮助小可可呢?(题中x,n均为正整数)

    Input

    输入文件只有一行,且只有一个数字n(1<=n<=2,000,000,000)。

    Output

    你的程序需要找到所有满足前面所描述条件的x,如果不存在这样的x,你的程序只需输出一行“None”(引号不输出),否则请按照从小到大的顺序输出这些x,每行一个数。

    Sample Input

    12

    Sample Output

    1
    5
    7
    11

     

    /*
        找出来所有的 x (0<x<n) x*x%n==1
    
        上式化简一下 (x-1)*(x+1)%n==0
        所以 (x-1)*(x+1)的因子必定也是n的因子    
        那么我们现在sqrt(n)的时间枚举n的因子,枚举到一组:a ,n/a (a是较小的那个) 然后枚举n/a的倍数,判断这个数是x+1,还是
        x-1,然后加入答案,最后去重输出
     */
    #include <bits/stdc++.h>
    
    #define LL long long
    #define MAXN 1234567
    
    using namespace std;
    
    LL n;
    vector<LL>v;
    
    inline void init(){
        v.clear();
    }
    
    int main(){
        init();
        scanf("%lld",&n);
        if(n==1){
            puts("None");
            return 0;
        }
        for(LL i=1;i*i<=n;i++){
            if(n%i==0){
                LL a=i;
                LL b=n/i;
                for(LL j=0;j<=n;j+=b){
                    if((j+2)%a==0&&j+2<n) v.push_back(j+1);
                    if((j-2)%a==0&&j-2>=0) v.push_back(j-1);
                }
            }
        }
        sort(v.begin(),v.end());
        if((int)v.size()==0){
            return 0;
        }else{
            printf("%lld
    ",v[0]);
            for(int i=1;i<(int)v.size();i++){
                if(v[i]!=v[i-1])
                    printf("%lld
    ",v[i]);
            }
        }
        return 0;
    }
  • 相关阅读:
    hdu 2647 Reward
    hdu 2094 产生冠军
    hdu 3342 Legal or Not
    hdu 1285 确定比赛名次
    hdu 3006 The Number of set
    hdu 1429 胜利大逃亡(续)
    UVA 146 ID Codes
    UVA 131 The Psychic Poker Player
    洛谷 P2491消防 解题报告
    洛谷 P2587 [ZJOI2008]泡泡堂 解题报告
  • 原文地址:https://www.cnblogs.com/wuwangchuxin0924/p/7858033.html
Copyright © 2011-2022 走看看