Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

为什么这个会RE?

Posted by gzw_02 at 2008-08-11 12:02:08 on Problem 2447 and last updated at 2008-08-12 10:52:25
import java.math.BigInteger;
import java.security.SecureRandom;
import java.util.Scanner;

	public class Main {
	    private final static BigInteger ZERO = new BigInteger("0");
	    private final static BigInteger ONE  = new BigInteger("1");
	    private final static BigInteger TWO  = new BigInteger("2");
	    private final static SecureRandom random = new SecureRandom();
        static BigInteger fac[] = new BigInteger[64];
        static BigInteger T=new BigInteger("0");
        static BigInteger D=new BigInteger("0");
        static BigInteger C=new BigInteger("0");
        static BigInteger E=new BigInteger("0");
        static BigInteger N=new BigInteger("0");
        static int f;
	    public static BigInteger rho(BigInteger N) {
	        BigInteger divisor;
	        BigInteger c  = new BigInteger(N.bitLength(), random);
	        BigInteger x  = new BigInteger(N.bitLength(), random);
	        BigInteger xx = x;

	        // check divisibility by 2
	        if (N.mod(TWO).compareTo(ZERO) == 0) return TWO;

	        do {
	            x  =  x.multiply(x).mod(N).add(c).mod(N);
	            xx = xx.multiply(xx).mod(N).add(c).mod(N);
	            xx = xx.multiply(xx).mod(N).add(c).mod(N);
	            divisor = x.subtract(xx).gcd(N);
	        } while((divisor.compareTo(ONE)) == 0);

	        return divisor;
	    }

	    public static void factor(BigInteger N) {
	        if (N.compareTo(ONE) == 0) return;
	        if (N.isProbablePrime(60))  {
	        	 fac[f++]=N;
	        	 return;
	        	}; 
	        BigInteger divisor = rho(N);
	        factor(divisor);
	        factor(N.divide(divisor));
	    }
	    
	    public static void main(String[] args) {
	    	
	    	Scanner cin = new Scanner(System.in);
            while(true){
            if(cin.hasNext()==false) break;
	        C=cin.nextBigInteger();
	        E=cin.nextBigInteger();
	        N=cin.nextBigInteger();
	        f=0;
	        factor(N); 
	        T=fac[0].subtract(ONE).multiply(fac[1].subtract(ONE));
            D=E.modInverse(T);
             
	        System.out.println(C.modPow(D, N));  
            }
	    }
	}
 
 



Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator