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",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\n",j,n) ;
                    break ;
                }
                mi *= 2 ;
                j++ ;
            }
        }
    }
    return 0 ;
}

原文地址:https://www.cnblogs.com/clljs/p/8401447.html

时间: 2024-11-02 23:10:58

winter 2018 02 01 关于模运算的一道题的相关文章

小手记之与运算代替模运算

等式 先抛出一个等式, X & (2n?1) == X % 2n 右边式子,也就是模运算,最后的结果为[0, 2n?1],而左边的式子,也就是与运算,可以将X的高位清掉,最后剩下的是X的[0, n)位上面的数值,这个值当然也是∈[0, 2n?1],所以左右两边是相等的. 对比 模运算经常用来做哈希,利用上面的等式,我们完全可以使用与运算来代替模运算, 好处,与运算要比模运算来得快: 限制,模数必须是2的次幂: 参考资料 http://ifeve.com/dissecting-disruptor-

Numpy 基本除法运算和模运算

基本算术运算符+.-和*隐式关联着通用函数add.subtract和multiply 在数组的除法运算中涉及三个通用函数divide.true_divide和floor_division,以及两个对应的运算符/和// 1. 数组的除法运算 import numpy as np # divide函数在整数和浮点数除法中均只保留整数部分(python3中的np.divide == np.true_divide) a = np.array([2,6,5]) b = np.array([1,2,3])

mysql中的优化, 简单的说了一下垂直分表, 水平分表(有几种模运算),读写分离.

一.mysql中的优化 where语句的优化 1.尽量避免在 where 子句中对字段进行表达式操作select id from uinfo_jifen where jifen/60 > 10000;优化后:Select id from uinfo_jifen where jifen>600000; 2.应尽量避免在where子句中对字段进行函数操作,这将导致mysql放弃使用索引 select uid from imid where datediff(create_time,'2011-11

大整数取模运算出现运算结果负数的解决方案

首先我们看个例子 <?php echo 12121212121 % 1000000; //结果为 -689767 //实际应该为12121 ?> 这里的取模运算(取余数)出现了BUG.那么需要声明一下,负数也是可以取模操作的,并不是出现负数就是不对的我们应该把这种长整数类型看成float型数据进行处理介绍一个函数float fmod ( float $x , float $y )返回除法的浮点数余数通过这个函数的运算,就可以得到原本想要的余数结果 <?php $a = floatval(

模运算%的结果符号

代码: #include <stdio.h> #include <stdlib.h> void display(int, int); int main(void) { // 模运算的结果取决于第一个操作数的符号 // 如果第一个操作数是正数,得到的模也是正数 // 如果第一个操作数是负数,得到的模也是负数 // a % b = a - [a / b] * b // [x]表示对数x趋零取整 // C99中,对整数除法规定趋零截尾 int a, b; a = 9; b = 5; di

关于codehunt Level 02.01 的疑问

codehunt Level 02.01 原题大意如下 : 假设给定下列函数声明 public static int[] Puzzle(int n) { return null; } 要求写出该方法具体函数代码,返回值应为下列类似的值 n 值 1 {0} 2 {0, 1} 3 {0, 1, 2} 我写的如下方法 public static int[] Puzzle(int n) { int[] re = new int[n]; for (int i=0; i<n; i++) re[i] = i;

取模运算

脑子不好使,老是记不住(?_?),备忘一下. 模运算与基本四则运算有些相似,但是除法例外.其规则如下: (a + b) % p = (a % p + b % p) % p (a - b) % p = (a % p - b % p) % p (a * b) % p = (a % p * b % p) % p a ^ b % p = ((a % p)^b) % p 结合律: ((a+b) % p + c) % p = (a + (b+c) % p) % p ((a*b) % p * c)% p =

10亿次的比较--PHP”与“运算和”模“运算效率比较

在涉及到计算数字的奇偶是,一般都用到"与"运算和"模运算",那么这两种运算用PHP语言来实现的话,哪个更快呢?在比较前,我是倾向于前者的.但结果却让我很诧异.代码如下: "与"运算: <?php set_time_limit(0); $i = 1; $t1 = microtime(true); while($i < 1000000001){ $i ++ & 1; } $t2 = microtime(true); echo $t

poj 3980 取模运算

取模运算 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10931   Accepted: 6618 Description 编写一个C函数mod(int n, int m),实现取模运算% Input 输入包含多行数据 每行数据是两个整数a, b (1 <= a, b <= 32767) 数据以EOF结束 Output 于输入的每一行输出a%b Sample Input 5 3 100 2 Sample Output