HDU 1395 数论小技巧

数论中小技巧:因为每次只需要一个大数 mod n  的余数,所以为了计算机运算的方便,先进行转换一下..

                          ( a * b ) % n = [ ( a % n ) * ( b%n )  ] % n ;

                          ( a + b ) %n = [ ( a%n ) +( b%n ) ] %n ;

题意:中文

思路:欧拉定理,不过它是要求最小的整数,所以只能用欧拉定理来判断优化...

           例如: 2^k mod n = 1 ;  则 k = E (n) 一定是成立的;而且如果该等式成立,那么(2,n)一定是互质的(欧拉定理),就不证明了...

           最后用暴力来求吧,想不到更好的办法了...

代码:

#include<iostream>
using namespace std;
int main(){
    int n;
    while(cin>>n){
        if(n%2==0 || n==1) {
            printf("2^? mod %d = 1\n",n);
            continue;
        }
        else{
            int sum=1;
            for(int i=1 ; ; i++ ){
                sum *= 2;
                if(sum%n==1){
                    printf("2^%d mod %d = 1\n",i,n);
                    break;
                }
                sum = sum%n;
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值