zoukankan      html  css  js  c++  java
  • winter 2018 02 01 关于模运算的一道题

    题目:给出一个正整数n,问是否存在x,满足条件2^x mod n=1,如果存在,求出x的最小值。

    分析:1、若给出的n是1,则肯定不存在这样的x;

          2、若给出的是偶数,2的次幂取余一个偶数得到的肯定是给偶数,所以也找不到;

       3、若给出的是奇数,其个位的数字无非是3、5、7、9,而2的次幂的个位为2、4、6、8,分别-1为1、3、5、7,即奇数的倍数都能找到相对的,则2的次幂取余每个奇数都会找       到一个合适的幂数满足题意。

    代码:

    #include <stdio.h>

    int main()
    {
        int n ;
        while(scanf("%d",&n)!=EOF)
        {
            if(n==1 || n%2==0)
            {
                printf("2^? mod %d = 1 ",n);
            }
            else
            {
                int j = 1, mi=2;
                while(1)
                {
                    mi %= n ; //让min等于min取余n的余数,因为这个数取余n是否得1与商以无关,接下来只看得到的余数即可。
                    if(mi == 1)
                    {
                        printf("2^%d mod %d = 1 ",j,n) ;
                        break ;
                    }
                    mi *= 2 ;
                    j++ ;
                }
            }
        }
        return 0 ;
    }

  • 相关阅读:
    天梯赛 社交集群(并查集)
    蓝桥杯 正则问题(dfs)
    天梯赛L3-001. 凑零钱(01背包记录物品)
    天梯赛/PAT 二叉树总结
    GPLT天梯赛 L2-022. 重排链表
    蓝桥杯 2的次幂表示(递归)
    排列与组合的一些定理
    卡特兰数
    洛谷P1349 广义斐波那契数列(矩阵快速幂)
    Manacher's Algorithm 马拉车算法(最长回文串)
  • 原文地址:https://www.cnblogs.com/clljs/p/8401447.html
Copyright © 2011-2022 走看看