1 solutions

  • 0
    @ 2025-11-5 15:00:47

    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