您的位置:首页 > 其它

hdoj 1395 2^x mod n = 1

2015-04-06 18:24 274 查看

2^x mod n = 1

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 13617 Accepted Submission(s): 4212



Problem Description
Give a number n, find the minimum x(x>0) that satisfies 2^x mod n = 1.

Input
One positive integer on each line, the value of n.

Output
If the minimum x exists, print a line with 2^x mod n = 1.

Print 2^? mod n = 1 otherwise.

You should replace x and n with specific numbers.

Sample Input
2
5


Sample Output
2^? mod 2 = 1
2^4 mod 5 = 1


费马小定理的运用:
n为偶数时 不会存在x 使得 2 的 x次方 对n取余为1;
n为1时也不会存在;
n为非1奇数时,则n与2互质,故必存在一值x使得 2 的 x次方 对n取余为1。

#include<stdio.h>
#include<math.h>
int main()
{
    int n,i,j,mark,sum;
    while(scanf("%d",&n)!=EOF)
    {
        if(n%2==0||n==1)
        {
            printf("2^? mod %d = 1\n",n);
            continue;
        }
        sum=1;
        for(i=1;;i++)//表示2的次方数 
        {
            sum*=2;
            if(sum%n==1)
            {
                mark=i;
                break;
            }
            sum%=n;
        }
        printf("2^%d mod %d = 1\n",mark,n);
    } 
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: