Ir para conteúdo
Fórum Script Brasil
  • 0

Como Eu Consigo Um Inteiro Maior Que 32bits?


WarSoldier

Pergunta

Tipo só para vocês terem uma ideia

unsigned long int n=290766479, e=4287864489;

T=(2021^e) MOD n;

ou melhor T=(pow(2021,e))%n ISSO está DANDO ERRO, por estar misturado o real com o inteiro eu acho e estar utrapassando o 32bits...

O que faria com o T???

pois o unsigned long int vai de 0 até 4.292.967.295 que é ide 32bits....

A exponenciação acho que deve ser real e o resto da divisão acho que tem que ser inteiro...

Se alguém poder me ajudar as variaveis n e e estão no meu programa como sendo unsigned long int

Estou no aguardo...

Link para o comentário
Compartilhar em outros sites

15 respostass a esta questão

Posts Recomendados

  • 0

Brother, isso passa e *muito* de 32bits. Veja só quanto é 2021 ^ 4287 (repare que nem pude utilizar o valor todo do expoente que você citou, mas apenas os quatro primeiros dígitos):

91788028138739656153330692057493370811457616833367407538637095293873046778726775426132370920782242606906844961421025185246888138040876920049977151179841296051825066258638889962461159790555508893430875274948634192358751130569044559785253598748276145316331086654203113333638882342940472120310903670057471404847994001490616198679878213786863351992964034331548900831672357204437829987858054779368880408503075926494099604771804229261419981421611911816959580753337440707532252569640624603003986424249583640774888844007669635064884814254580679734387162061279786884773942869407798700570280092541361181216691307205037277666852437858375454784999630944176428907905504801586341849260602564410694620633321226061174194766391086300935361566324864426150020727399776902137946389929170330342372412484325624274438925169256721572436899781878909458728696939428411815626370216280087691568634380174247959066779966255321636292806239001955716222351100197492336983487198117479928679260094179931635250116266865383810718696062387107274656989610390994528457473972660855718493687276902975704410942625032413185211846374835610633404743580549697542105249924491931752624697326463069537118851099099844803678336711093197065593030571904995104713209063232501557039099229228494969774219594571084618688764702802300504860932643204450909602794023000695746674940608769369183863852019556384849467904527092993485967257320913730718474704924262187745237763245093779564947233717147364498893975342215708279180023503398971660298397373057785665257728022754639010641118342491009654796030935957679385781572078809427382756184784239663575827694269072733183319623496135159062317706953108683163397982083272245679705930667706400157724041305036643786982031081674171656841584048544756036284416816309967501708867722515536042517835420013818079407882597754285184671942012123841815583139815472499417217704606501600755576156627560317312989540842700671626878380080045127398026890483131457465616780034079834836973258294178857683690255349922427708892944353968291932808284637648319190748202196158529323963318778846542348429209131742729466894792231907123059504663162410739346159187787001752537220034287415573720942362700120024169048485923684780237229354100636226292621304068806519351381203775759383206747168869259179401117967856461776216102172932200240264644924718810036473161592818051468307793336304333773058336043600448014984594473467181062574876193357196192174226125215341224533519711739900483336434065255201365415187809584976313182548198074101190607139593500348138082051647457343304370494547140092801458004585604331979155062510959648992461324863148288025884428902330633794416364032166480481785013454931028617995640179183281067065998658675795418581554248340118249215283184843523216548210497894880657599072983604835353110725872214925706472630720816533835653925842738329618143155481413192409771821477604671582421870203498945380731841698724971317232686066703174992927548193708063367191445020054501525463966629393748170942329710022466220635093350156635910733867947360447386526518598810643733364112274339671092262065542807047539847011689518238710465698027365824346795121722564453990505702311781934418042543271422974255117476839439360359067088036957125088643899642633301297692432125342501460854786177527368936551632074222181181842291764502325477189711804372358661967065756633988987329974601773241053521862915754062361387956442203230497671372098095827285788826330242388077489974967050939958797621033453527142490554045575006784437524159058313661031693579275638287565882286477825200644317562717676824222500176313554987400723946758454523504814182398171548984964913647791941398784684580035628865322586835440221605411337442050609180938332766986939897758700249218099908454905318325739784722781912124142008010754575735528279846448862996935589739728579415017261589090787681148395358834277011025242807999202980382538141174554973681619441119543103993317813738287552791064898429258079349089694675324569797534598720969422810062576240596634497172435771242531214144189369631319016984815731851780612674639034457536504680105005358102951837321421128990082352281567162590257509081818830168476421933094213595353569248712350566098600826206391313955533932967105659678631794443472117346954785988704264681118694857298119289398590472280398763289961195677300136976345999602649809516248975281713474319037156689338158549179216815109088491098366999004748150072944718442168885521238470109712805941184684728618145988994717523714135962723191274981021979586937192065999812781543498963813825681125767686762007889580525183114260866523945585015222789505432036159738530349482563036505380686032435372338600016858121460342345125621287410221923498679950169629121371432567632667270538686726898565652743948069926885760660407581486588221727856988901681691118917791918883200791397793954794360005120450548664119626115035116120478582514605920116509682986519081190101129067036356703815435496122451679195031987156356141298847670471688218862700089422403626570375624965379432039055406231604399593190794840137697898835261882251232796776328556017279443325368415553146543447416945456328490972139362955119497134088403799910771327189416091579427433834103602589838777202169727609140702184768947401393278319479193418530218822390077359866668359614598115847614701457807657160115334535062941508176119636619489846056352373948741842589611022547730278993766394278375885607902329125682444064506638258689398105867555365495978997362992003295967953102157480579234519935484205164498660929382215157557327201890773685131383879315086779020539844687032752512382840290850068367460666284127373702116553825060138358663490672659511677354517266459510949294338327695412094459232842236084727228006277322224883554807587128853460594693158596027444500895308226947234517327700354235623571743707635067932234770244893379132152018546108722428500731256237774985620017643234260631880419632610331434083130744229111561258701952854972820935502142364336408795010906317748428617832010984991826381490251583770717057779052361866378884593087090660246644577914846800138566623881241531607332161635687317887722147912449596700852061355150408809698005419507852856730267272640492291821464631426447223933787695274977410300693938298312638890945894283686156862168176069923374382478931990797402066382375252667193324410139367349883229839357525447603523890080995635178008862530901136665830563713706974627254893380491820092608987544587797658760046515120681687784328568537756395255207027657694414153613989033227658635704312346449479823883252529096958673839671205845756221876128988579716916997443315840016095864735268571073110987785582370987652752703663332200988147199190435624311184739662824028265983523902137470593430442013334454176569258407503053434023943821227759521724540333880567503533041695353184145510578116623986637542215591163468922104276857064420275356924926328885835154290751581891465375329134285970710155118298458662139754475659557791501792838128444779899677319903681295900685691752360637835618449932697836090012421323780801961483711052014927657593393476392082466727678414995954991754119090705954896991721893985250595675976380595336380925246950278326559101409423868672520193168410621660871526416517699570717271456445630150787806200930163655372777086124740565252448954398619663362430469317618246588744678905004663496356495922417580201654605866199270000176227415527153078036452095093851766272337687569532998369678431148637276445767111246563411304479496703210829534409719834298866080782446354485216415335223879913206760428807267803959197933885154383506934222543469981145149045545786446093364976939038622185088360292024068203006984824439420409865951205911665064166720845366160488433218054447627701179542584882700215144714662870466395979693480789360461907642435832200945547491482681288154862651517158636288905118720685229902994814436029015274868819226928791231067111735445006502358148685638806514041107027426450423636396936156689865490923075464849443399870851740550635461593388341021346150254691476445382145352337520587586974673119652705124040433756997739761348044963030309920835858640862813812060709007996175896859288702833292225315044768542453387276149305874921471345217675071008076658360776416322111346019533299280610929923737449679299212370306557195839216889520032829142780264389175227522221381426540617721564876237087184258609023616125361031090283943645152798909526272311380883590575847802840818305446817577002216510656801981814804212012777602229971847024239315844151131496290935351454122175135428996029760622701202577832975094067872144949077442184472162866417200270825560753382007208474345783584850704455127329423986247611472926050840397407116196777398229044607446571923358465270765099559514774326910820704195611578737070228810011780436675257616119903213696002702247382520192885905482695053761364058430908455055576805940915118547574959395960395848389479327163840957857543117328613097069019366827840741613053473625103024980483039686599233263923493437160403982956661080428622945923617905081719282084332298591115087839630628496158966208147048574799656135457111055453461139812122995546773684967898264886255111915373919008552249595245148009347685541958612777522654777690538389554603097737699001986580503655610671194003721514707639125318542975868523943110513233185305533030578409992178763546571613412505922883298710838604139961077967009457478717234311681840188758422750339409800746277351538221455218060922296867260797876680991891973408253194291530674380877140153598479363381826883230950756087299621713128345418638682283460075496637058522296847682723651928874131122367956449847368104368529942818348664515168217126717607065616141956199151042639519917363339367117526404382489850024660296111871423125216690598352146304768443868280699276887424466138890596586450063507952487291595566959853141656423537226881572898611853153021256638915384762725320818276293503613415817715341145125763494577456506063643462518236040472678593697359278540813361130520636801404403938953823847688696583952136509659908670791964079672135467851842149570548498683574260494299690455655315360189361304002667107795405955257656145426173385894775527239047527632111370341793097478364887504209665117722811064079096554499571775056461447909510837691712440110568264896549838104211975032176306892158611330618501945058109534011068869812019681830111038828624297608548385968529101551713075009117642166969398052586193632631126996034617765973043364218361423027203926410230156280069939946956484284588228808526048209850895948579654447352645912883457316181649938149266048645705827476651491613166214190237519643807277695987193852923952962989007722909808998212281788056238908015815453896535850965595473499743299710432600445290444406223133366767384002242652025202820599590653215228019414924940951512673923554284018419335975338952019373655419810231113440441852246907744478786413781654023556983537690126095224983822904532827477448985836093276096351594951041203275079738608880888619036967372045833420198646157200935061329580537583560381125978589909782940759367741598411267155461807769620277615034939815040775615473400926165352464150046423950548941347799169605071203922745471032970025547947257315373122041951799285011101576362333466916823959096175259249861356901151093090928172123320759858325552365097404312838749002280521138659854379919308221391322729608583237340470691688388090137050603191674870585894407294658720421550070671774946708238440244935993122622306162389889670872972128228463336078351683624534302662145847208036909169067716649215161349435615865827380410079612344514820960729265440342784411946820372893054536552889208394433662464667888701498176865440231501846173685160139254559366254056309826670278155322794084732207637930823228533163975434945054100786262670811142163898907015275315268994254090324780095352414839779953937793125349568353143337341461917748557417698777245160128223651959446909787993689511780456414152809993407514004929140487804209541430959166234333513715902441339722417477863634659174588237803857213464712381826411975794511019449118604710466376803542201208000964561719884343471041528564422323130679338113798388795093620121150466547407884147852671939234208660292379050352835122299752486541304612068923885867903201642184152636979410117954414269689573077360235304331069802381337484800644362121642042543895926995990754882760927535721667783869987511588325936727515680723536417682432330685626498263919651602095074261412207518594743247090960571230429292767757985334851302920038303716558582730778906894150914934298234418720486482478334453133626941613130869030305228315021626162957353535022008589063583962466092024404205807605804661802811520230894435964969643443493831391408847949712159515934164180132736558551590791197598663708931604826147869858407612491822571388621834545640303477511623835006873825548731473021317285391350304702701161856856835596742179040398125035546793592993211509836483350113053635190339448656338224675864104243340632560817643529333822651902986877043062260727790373785851838805216288106612656623181428528216838486606269734145141032278486284198676943120108772794269057059130393631715427691718420998758892798810716287436288911502845550035503512199116207653165588291021022103719205996866520948414409467341789665932366620425782432967817619095001204467298201905145033024792202397772367051870699736545587571233625019561820678229634535587929289699618162938703545022677064552729950760121333540780494644107279385931163714899582814620507030512640228370533849036478245131119024575523457075660942482093184971192379356201917880616672678410590614077994196906067931734760691170178554251422543977800194495747957342078725725413703185931103856306553699304819588224339057002913934865973006010653236980211410159023663351461501857307018598718859032378785250378587398971983264544383288001421362623155589436683159230129779991441818133421053675709924148177203815352911900099526234392007654700066960275728405379013265593443242767509976002546076930478470740930860928832053939835647433424296265479721047323656648632873869025837300055891653822119639275283936571427021916627746263385391183867080433932542195431500465096336162135275746511261511018960564910837235873533265491521234791509840995559274347243257017663697403804397803924737621031800535375358688618561285774830710125447505415938635747516141

Eu fiz esse cálculo com Python (http://www.python.org/) que suporta números grandes como este (mas não tão grandes quanto seria o seu cálculo original). Não teria como reduzir esse cálculo?

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Eu poderia seduzir o numero para no maximo 255^4287864489 MOD 290766479...

é poque é um agoritmo de chave assimetrica RSA... Então se não der vou ter que reduzir o tamanho da chave...

Qual o tamanho maximo que você acha que terá que ser para conseguir fatorar isso?

MAs Graymalkin não existe nenhum artificio para usar isso na linguagem C++...

Link para o comentário
Compartilhar em outros sites

  • 0

Os tamanhos máximos dos tipos em C++ [1] são ridículos em relação ao que você deseja.

O ideal seria você procurar por alguma classe que implemente a utilização de inteiros muito grandes (assim com a classe BigInteger que existe para Java [2] e C# [3] - mas não sei se esta classe suportaria o tamanho do inteiro que você quer).

O único limite de Python, atualmente, para um inteiro, é a memória disponível no computador [4]. Porém, é extremamente lento utilizar um inteiro gigante assim.

[1] http://home.att.net/~jackklein/c/inttypes.html

[2] http://java.sun.com/j2se/1.4.2/docs/api/já...BigInteger.html

[3] http://www.thecodeproject.com/csharp/biginteger.asp

[4] http://www.daniweb.com/tutorials/tutorial32575.html

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Acho q consegui uma classe para

Peguei uma classe biginterge chamada de miracl, vou ver se eu consigo fazer com ela...

Obrigado pela ajuda pessoal, se eu conseguir disponibilizo ela para a galera....

Falow

Link para o comentário
Compartilhar em outros sites

  • 0

Faz uma lista encadeada.....

abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Mesmo com uma lista encadeada [1] o esforço computacional seria extremamente alto para, por exemplo, somar dois inteiros.

não não... o esforço não é tão grande... você poderia trabalhar com nós de caracter...

ou seja você varre a expressão contida numa string... pega caracter por caracter e joga num nó da lista contendo um campo de char...

depois é transforma o caracter em codigo ascii e subitrai 48 que tera o valor exato contido no nó...

resumindo não trabalhará com lista de inteiros ou inteiro longo e sim com lista encadeada de caracter assim pode-se digitar expressoes imensas!!!!!!!!

abraços!

Link para o comentário
Compartilhar em outros sites

  • 0

Mesmo com uma lista encadeada [1] o esforço computacional seria extremamente alto para, por exemplo, somar dois inteiros.

não não... o esforço não é tão grande... você poderia trabalhar com nós de caracter...

ou seja você varre a expressão contida numa string... pega caracter por caracter e joga num nó da lista contendo um campo de char...

depois é transforma o caracter em codigo ascii e subitrai 48 que tera o valor exato contido no nó...

resumindo não trabalhará com lista de inteiros ou inteiro longo e sim com lista encadeada de caracter assim pode-se digitar expressoes imensas!!!!!!!!

Concordo que você pode *guardar* muitos dados assim. Mas, e operar sobre eles? Por exemplo, como você pretende somá-los? Imagine uma lista com os seguintes elementos (estou supondo aqui já os valores, ou seja, já com a conversão que você propôs): 5, 2, 3, 4, 5, 6, 7, 8, 9, 7, 4, 7, 9, 5, 2, 3, 7, 5, 6, 7. Daí, imagine outra lista com: 2, 3, 4, 8, 7, 8, 9, 1, 2, 3, 4, 8, 6, 7, 8, 7, 9, 5. Como você iria somar estes dois "números"? Elemento por elemento (de trás para frente) e jogando o excedente para o próximo (igual a gente faz na mão)?

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

aí pessoal alguém conhece a classe MIRACL - Multiprecision Integer and Rational Arithmetic C Library...

abaixa no endereço ftp://ftp.computing.dcu.ie/pub/crypto/miracl.zip , poxa eu li o manual, tentei instalar mas não to conseguindo utilizar direito... Essa biblioteca é free para fins educacionais e não comerciais, ela trata de numeros imensos...

http://indigo.ie/~mscott/

para dar uma olhada o que ela faz

Po tentei colocar no Borland turbo C++, mas acho que fiz alguma coisa errada, pois os exemplos não estão rodando... Se alguém já instalou me da um toque...

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Amigos... ai esta um algoritmo em c que eu implementei...

ele soma numeros gigantescos armazenando eles em uma lista encadeada...

porem tem um erro de logica no somatorio dele..

quem descubri o erro eu agradeceria

ex: tente somar

999

+

1

ai verao...

mais de qualquer forma a solução está ai...

#include<stdio.h>
#include<conio.h>
#include<malloc.h>

typedef struct no{
        int dado;
        struct no *ant;
        struct no *prox;
        } *def_lista;

int vazia (def_lista *p){
    return ((*p) == NULL);
}

void inicializa (def_lista *p, def_lista *u){
     (*p) = NULL;
     (*u) = NULL;
}

int aloca(def_lista *p, def_lista *u, char d){
    def_lista que = (def_lista) malloc(sizeof(struct no));
    
    if (que == NULL){
          return 0;
    } else {
           que->dado = (d-48);
           que->prox = NULL;
           que->ant = NULL;
    }
    
    if (!vazia(p)){
       (*u) -> prox = que;
       que -> ant = (*u);
       (*u) = que;
       
       return 1;
    }
    
    if (vazia(p)){
       (*u) = que;
       (*p) = que;
    } else {
           return 0;
    }
}

void mostrar( def_lista *p ) {
     
     def_lista que = (*p);
     
     while(que != NULL) {
             printf("%d", que -> dado);
             que = que -> prox;
     }         
     
}

int contar( def_lista *p ) {
     
     def_lista que = (*p);
     int temp = 0;
     
     while(que -> prox != NULL) {             
             que = que -> prox;
             temp++;
     }         
     
     return temp;
     
}

void mostrar2( def_lista *u ) {
     
     def_lista que = (*u);
     
     while(que != NULL) {
             printf("%d", que -> dado);
             que = que -> ant;
     }         
     
}

int soma(def_lista *p_1, def_lista *u_1, def_lista *p_2, def_lista *u_2, def_lista *res, int maior){
    def_lista aux_1, aux_2, *temp;
    int x, y, m;
    
    aux_1 = (*u_1);
    aux_2 = (*u_2);
    
    m = maior;
    
    if( m == 1 ) temp = &aux_1;
    else temp = &aux_2;
    
    while ((aux_1) != NULL && (aux_2) != NULL){
          
          x = ((aux_1)->dado) + ((aux_2)->dado);
          
          if (m == 1){
             if (x > 9){
                   y = x/10;
                   x = x%10;
                   aux_1->dado = y;
                   (aux_1->ant)->dado += x;
             } else {
                    aux_1->dado = x;
             }
             aux_1 = aux_1->ant;
             aux_2 = aux_2->ant;
          }
          
          if (m == 2){
             if (x > 9){
                   y = x/10;
                   x = x%10;
                   aux_2->dado = y;
                   (aux_2->ant)->dado += x;
             } else {
                    aux_2->dado = x;
             }
             aux_1 = aux_1->ant;
             aux_2 = aux_2->ant;
          }
          
    }
    
    
    if (m == 1) {          
          
          (*res) = (*p_1);
                    
    }

    if (m == 2) {          
          
          (*res) = (*p_2);
                    
    }

    return 0;       
}

int main(void) {
         def_lista prim_1, ult_1, prim_2, ult_2, res = NULL;
         int n1, n2, i;
         char temp1[500],temp2[500];
    
        inicializa(&prim_1,&ult_1);
        inicializa(&prim_2,&ult_2);

        system ("CLS");
        printf("\nDigite a primeira expressao: ");
        gets(temp1);
        printf("\nDigite a segunda expressao: ");
        gets(temp2);

        n1 = strlen(temp1);
        n2 = strlen(temp2);
        for(i = 0; i < n1; i++) {

              aloca(&prim_1,&ult_1,temp1[i]);

        }

        for(i = 0; i < n2; i++) {

              aloca(&prim_2,&ult_2,temp2[i]);

        }    
                  
                   
        n1 = contar(&prim_1);
        n2 = contar(&prim_2);
        
        
        mostrar(&prim_1);
        printf("\n");
        mostrar(&prim_2); 
        printf("\n\n");
        
        if(n1 >= n2)
              soma(&prim_1, &ult_1, &prim_2, &ult_2, &res,1); 
        else
            soma(&prim_1, &ult_1, &prim_2, &ult_2, &res,2); 
        
        mostrar(&res);
                   
        getch();   
     
}

quem poder ajudar no erro de logica na parte de soma eu agradeceria... abraços!!!!!!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...