1 solutions
-
0
C++ :
#include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std ; struct bignum { int data[505] ; int size ; bignum( int n ) { memset( data , 0 , sizeof( data ) ) ; size = 1 ; data[0] = n ; } void display() { int t = 0 ; for( int i = 500-1 ; i > 0 ; i -- ) { printf("%d" , data[i] ) ; t ++ ; if( t % 50 == 0 ) printf("\n") ; } printf("%d" , data[0]-1 ) ; } void X( const bignum & a ) { bignum t(0) ; for( int j = 0 ; j < a.size ; j ++ ) { for( int i = 0 ; i < a.size && i + j < 500 ; i ++ ) { t.data[i+j] += data[j]*a.data[i] ; } } int up = 0 ; t.size = min( 500 , size + a.size - 1 ) ; for( int i = 0 ; i < t.size ; i ++ ) { data[i] = ( up + t.data[i] ) % 10 ; up = ( up + t.data[i] ) / 10 ; } while( up != 0 && t.size < 500 ) { data[t.size++] = up % 10 ; up = up / 10 ; } size = t.size ; } }; int main() { int p ; scanf("%d" , &p ) ; printf("%d\n" , (int)(p*log10(2.0))+1 ) ; bignum res(1) ; bignum t(2) ; while( p ) { if( p % 2 == 1 ) res.X(t) ; t.X(t) ; p = p / 2 ; } res.display() ; return 0 ; }Java :
import java.math.*; import java.util.*; public class Main { public static void main(String args[]) { Scanner cin = new Scanner(System.in); int n = cin.nextInt(); System.out.println((int)(n*Math.log10(2.0))+1); BigInteger a = BigInteger.valueOf(2); BigInteger t = BigInteger.valueOf(1); BigInteger m = BigInteger.valueOf(10); m = m.pow(500); while(n != 0) { //System.out.println(n+"****"); if(n % 2 == 1) t = t.multiply(a).mod(m); a = a.multiply(a).mod(m); n /= 2; } t = t.add(BigInteger.valueOf(-1)).add(m).mod(m); String s = t.toString(); int len = s.length(); while(len<500){ s = '0' + s; ++len; } for(int i = 0; i < 500; ++i) { System.out.print(s.charAt(i)); if((i+1) % 50 == 0) System.out.println(); } } }
- 1
Information
- ID
- 16324
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By