关闭

【HDU】 1395 2^x mod n = 1

159人阅读 评论(0) 收藏 举报
分类:

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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:59319次
    • 积分:2663
    • 等级:
    • 排名:第13652名
    • 原创:215篇
    • 转载:0篇
    • 译文:0篇
    • 评论:4条
    最新评论