Sto cercando di risolvere i problemi preliminari di un concorso di programmazione e per 2 dei problemi devo calcolare e stampare alcuni interi molto grandi (come 100 !, 2^100).Come lavorare su interi grandi che non si adattano a nessuna delle strutture dati del linguaggio
Ho anche bisogno di un modo veloce per calcolare i poteri di questi grandi numeri interi. ?
Mi può consigliare alcuni algoritmi o strutture di dati per questo (a proposito, ho letto Interfacce C e la sezione 'arbitraria precisione aritmetica' Implementazioni ma non aiuta per pow())
EDIT: Penso che l'esponenziazione con il metodo di squadratura e il cambio di bit funzionerà per il potere ma ho anche bisogno di un modo veloce per calcolare i fattoriali per questo inte. Grazie.
EDIT2: per coloro che sono interessati;
Trova la lunghezza della stringa di bit più breve che include tutte le stringhe di bit con lunghezza N (scusate il mio inglese, darò un esempio). N < = 10000
Ad esempio, la lunghezza della stringa di bit più breve che include tutte le stringhe di bit di lunghezza 2 (00, 01, 10, 11) è 5 (11001).
La mia soluzione per questo problema è stato 2^n + n - 1. (quindi dovrei calcolare potenze di 2, penso che userò bit-shifting)
altro problema è, date le 2 lunghezze, scopri in quanti modi diversi puoi raggiungere la lunghezza N. Ad esempio, l'input è 10, 2, 3. Quindi devi raggiungere 10 con 2 e 3 (ad esempio, 2 + 2 + 2 + 2 + 2, 2 + 2 + 3 + 3, 3 + 2 + 2 + 3, 3 + 3 + 2 + 2 ...). 1 < = N < 2^63. Calcoleremo l'anwser nel mod 1000000007.
La mia soluzione era, 2x + 3y = N, quindi x = (N - 3y)/2. Per y da 0 a 2 * N/3, se x è un numero intero, allora dovrei calcolare la permutazione generalizzata per questa X e Y, totale + = (x + y)!/(x! * y!).
Quali sono gli argomenti al massimo (100 o più?) E quanto tempo dovrebbe prendere per calcolare le risposte? – user502144
Il problema è diverso ma devo calcolare 2^10000 e 100! risolvere. Il limite di tempo è 1 secondo e il limite di memoria è 256mb. Posso tradurre il problema se sei interessato. Potrebbe esserci un'altra soluzione ma è scritto nel testo del problema che la risposta è maggiore di 64 bit. – sinan
possibile duplicato di [Long lungo non firmato non andrà oltre il 93 ° numero di Fibonacci?] (Http://stackoverflow.com/questions/3125872/unsigned-long-long-wont-go-beyond-the-93th-fibonacci- numero) –