2 votos

¿Cuál es el valor de $2^{3000}$

¿Cuál es el valor de $2^{3000}$ ?

¿Cómo calcularlo utilizando un lenguaje de programación como C#?

24voto

vadim123 Puntos 54128

1230231922161117176931558813276752514640713895736833715766118029160058800614672948775360067838593459582429649254051804908512884180898236823585082482065348331234959350355845017413023320111360666922624728239756880416434478315693675013413090757208690376793296658810662941824493488451726505303712916005346747908623702673480919353936813105736620402352744776903840477883651100322409301983488363802930540482487909763484098253940728685132044408863734754271212592471778643949486688511721051561970432780747454823776808464180697103083861812184348565522740195796682622205511845512080552010310050255801589349645928001133745474220715013683413907542779063759833876101354235184245096670042160720629411581502371248008430447184842098610320580417992206662247328722122088513643683907670360209162653670641130936997002170500675501374723998766005827579300723253474890612250135171889174899079911291512399773872178519018229989376

Encontrado usando Wolfram Alpha

13voto

bentsai Puntos 1886

Para evitar problemas de desbordamiento numérico, se debe utilizar algún tipo de aritmética de precisión arbitraria para almacenar números tan grandes. Muchos sistemas de álgebra computacional incluyen aritmética de precisión arbitraria.

También se puede utilizar una biblioteca bignum como GMP . Aquí hay una implementación en C:

#include <stdio.h>
#include <gmp.h>

int main() {
  mpz_t two,two_to_the_three_thousand;

  mpz_init_set_ui(two,2);
  mpz_init(two_to_the_three_thousand);

  mpz_pow_ui(two_to_the_three_thousand,two,3000);

  gmp_printf("%Zd\n",two_to_the_three_thousand);

  mpz_clear(two);
  mpz_clear(two_to_the_three_thousand);

  return 0;
}

que compilamos con gcc por:

gcc temp.c -lgmp

que produce

1230231922161117176931558813276752514640713895736833715766118029160058800614672948775360067838593459582429649254051804908512884180898236823585082482065348331234959350355845017413023320111360666922624728239756880416434478315693675013413090757208690376793296658810662941824493488451726505303712916005346747908623702673480919353936813105736620402352744776903840477883651100322409301983488363802930540482487909763484098253940728685132044408863734754271212592471778643949486688511721051561970432780747454823776808464180697103083861812184348565522740195796682622205511845512080552010310050255801589349645928001133745474220715013683413907542779063759833876101354235184245096670042160720629411581502371248008430447184842098610320580417992206662247328722122088513643683907670360209162653670641130936997002170500675501374723998766005827579300723253474890612250135171889174899079911291512399773872178519018229989376

10voto

Dan Walker Puntos 3466

Esto es lo que obtuve usando PARI/GP tecleando 2^3000

enter image description here

  • PARI es una biblioteca C que permite realizar cálculos rápidos.

  • gp es un shell interactivo fácil de usar que da acceso a las funciones de PARI. GP es el nombre del lenguaje de scripting de gp.

10voto

MrLemon Puntos 13223

En C# (.Net 4.0 o superior) se puede obtener el valor deseado así:

String result = BigInteger.Pow(2, 3000).ToString();

5voto

Evan Anderson Puntos 118832

Una solución de MATLAB parece adecuada porque creo que hay muchos usuarios de MATLAB/Octave aquí.

Hay un Aritmética de enteros de precisión variable en el intercambio de archivos de MATLAB que crea una clase llamada vpi y todos los métodos relevantes como power , log etc. El uso es como el de MATLAB incorporado uint32 o unit64 . Añade la ruta a la carpeta que tenga este paquete. Escriba

>> A = vpi(2)^3000

>> A = 123023192216111717693155881327675251464071389573683371576611802916005 880061467294877536006783859345958242964925405180490851288418089823682358 508248206534833123495935035584501741302332011136066692262472823975688041 643447831569367501341309075720869037679329665881066294182449348845172650 530371291600534674790862370267348091935393681310573662040235274477690384 047788365110032240930198348836380293054048248790976348409825394072868513 204440886373475427121259247177864394948668851172105156197043278074745482 377680846418069710308386181218434856552274019579668262220551184551208055 201031005025580158934964592800113374547422071501368341390754277906375983 387610135423518424509667004216072062941158150237124800843044718484209861 032058041799220666224732872212208851364368390767036020916265367064113093 699700217050067550137472399876600582757930072325347489061225013517188917 4899079911291512399773872178519018229989376

Y el tipo de datos de A puede ser recuperado por

>> class(A)

ans =vpi

Bastante útil para las personas que trabajan en la encriptación.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X