【HDU】 1395 2^x mod n = 1

来源:互联网 发布:java体系结构图 编辑:程序博客网 时间:2024/06/05 20:06

2^x mod n = 1


题目链接

  • 2^x mod n = 1

题目大意

    找到一个最小的x满足2x mod n = 1如果没有则输出2? mod n = 1


题解

    我们可以把式子化为(22x1) mod n = 1 首先可以看到2x是个偶数,要想让该式成立肯定n不能为偶数或者是1,有了这个结论后我们就可以把式子化为(2(2x1 mod n))mod n = 1于是我们设F(x1) = 2x1mod n 所以我们现在有

F(x)=(2F(x1))mod n

一直推直到F(x)为1就行了。


代码

#include <iostream>#include <cstring>#include <cstdio>using namespace std;int n;int main(){    while(scanf("%d",&n)!=EOF)    {        if (n%2==0 || n==1)        {            printf("2^? mod %d = 1\n",n);            continue ;        }        else        {            int ans=1,cnt=0;            while (ans!=1 || cnt==0)            {                cnt++;                ans=(ans*2)%n;            }            printf("2^%d mod %d = 1\n",cnt,n);        }    }    return 0;}
0 0
原创粉丝点击