zoukankan      html  css  js  c++  java
  • HDU 4704 Sum (费马定理+快速幂)

    Sum

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)
    Total Submission(s): 647    Accepted Submission(s): 320


    Problem Description
     
    Sample Input
    2
     
    Sample Output
    2
    Hint
    1. For N = 2, S(1) = S(2) = 1. 2. The input file consists of multiple test cases.
     
    Source
     

    思路:一道整数划分题目,不难推出公式:2^(n-1),

    根据费马小定理:(2,MOD)互质,则2^(p-1)%p=1,于是我们可以转化为:2^(n-1)%MOD=2^((n-1)%(MOD-1))%MOD,从而用快速幂求解。

     公式2^(n-1) % MOD;

    可先对(n-1)%(MOD-1)

    import java.io.*;
    import java.util.*;
    import java.math.*;
    public class Main {
    	BigInteger n;
    	String s="";
    	BigInteger one=BigInteger.valueOf(1);
    	BigInteger Mod=BigInteger.valueOf((long)(1e9+7));
    	BigInteger Mod1=BigInteger.valueOf((long)(1e9+6));
    	public static void main(String[] args) {
    		new Main().work();
    	}
    	void work(){
    		Scanner sc=new Scanner(new BufferedInputStream(System.in));
    		while(sc.hasNext()){
    			s=sc.next();
    			n=BigInteger.valueOf(0);
    			for(int i=0;i<s.length();i++){
    				n=(n.multiply(BigInteger.valueOf(10)).add(BigInteger.valueOf(s.charAt(i)-'0'))).mod(Mod1);
    			}
    			long num=n.longValue()-1;
    			System.out.println(pow(BigInteger.valueOf(2),num).mod(Mod)); 
    		}
    	}
    	BigInteger pow(BigInteger a,long b){
    		BigInteger sum=BigInteger.ONE;
    		while(b!=00){
    			if((b&1)!=0){
    				sum=sum.multiply(a).mod(Mod);
    			}
    			a=a.multiply(a).mod(Mod);
    			b>>=1;
    		}
    		return sum;
    	}
    }
    


     

  • 相关阅读:
    python学习:字符编码与转码
    python学习:文件操作
    python学习:基本运算符
    python学习:列表、元组、字典、集合
    python学习:基础知识
    linux常用命令
    hadoop手动安全模式
    System.getProperty("user.dir")的理解
    如何获取SpringBoot项目的applicationContext对象
    spring无法注入bean
  • 原文地址:https://www.cnblogs.com/pangblog/p/3301852.html
Copyright © 2011-2022 走看看