WarSoldier Postado Junho 4, 2006 Denunciar Share Postado Junho 4, 2006 Tipo só para vocês terem uma ideiaunsigned 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 intEstou no aguardo... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Junho 4, 2006 Denunciar Share Postado Junho 4, 2006 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):91788028138739656153330692057493370811457616833367407538637095293873046778726775426132370920782242606906844961421025185246888138040876920049977151179841296051825066258638889962461159790555508893430875274948634192358751130569044559785253598748276145316331086654203113333638882342940472120310903670057471404847994001490616198679878213786863351992964034331548900831672357204437829987858054779368880408503075926494099604771804229261419981421611911816959580753337440707532252569640624603003986424249583640774888844007669635064884814254580679734387162061279786884773942869407798700570280092541361181216691307205037277666852437858375454784999630944176428907905504801586341849260602564410694620633321226061174194766391086300935361566324864426150020727399776902137946389929170330342372412484325624274438925169256721572436899781878909458728696939428411815626370216280087691568634380174247959066779966255321636292806239001955716222351100197492336983487198117479928679260094179931635250116266865383810718696062387107274656989610390994528457473972660855718493687276902975704410942625032413185211846374835610633404743580549697542105249924491931752624697326463069537118851099099844803678336711093197065593030571904995104713209063232501557039099229228494969774219594571084618688764702802300504860932643204450909602794023000695746674940608769369183863852019556384849467904527092993485967257320913730718474704924262187745237763245093779564947233717147364498893975342215708279180023503398971660298397373057785665257728022754639010641118342491009654796030935957679385781572078809427382756184784239663575827694269072733183319623496135159062317706953108683163397982083272245679705930667706400157724041305036643786982031081674171656841584048544756036284416816309967501708867722515536042517835420013818079407882597754285184671942012123841815583139815472499417217704606501600755576156627560317312989540842700671626878380080045127398026890483131457465616780034079834836973258294178857683690255349922427708892944353968291932808284637648319190748202196158529323963318778846542348429209131742729466894792231907123059504663162410739346159187787001752537220034287415573720942362700120024169048485923684780237229354100636226292621304068806519351381203775759383206747168869259179401117967856461776216102172932200240264644924718810036473161592818051468307793336304333773058336043600448014984594473467181062574876193357196192174226125215341224533519711739900483336434065255201365415187809584976313182548198074101190607139593500348138082051647457343304370494547140092801458004585604331979155062510959648992461324863148288025884428902330633794416364032166480481785013454931028617995640179183281067065998658675795418581554248340118249215283184843523216548210497894880657599072983604835353110725872214925706472630720816533835653925842738329618143155481413192409771821477604671582421870203498945380731841698724971317232686066703174992927548193708063367191445020054501525463966629393748170942329710022466220635093350156635910733867947360447386526518598810643733364112274339671092262065542807047539847011689518238710465698027365824346795121722564453990505702311781934418042543271422974255117476839439360359067088036957125088643899642633301297692432125342501460854786177527368936551632074222181181842291764502325477189711804372358661967065756633988987329974601773241053521862915754062361387956442203230497671372098095827285788826330242388077489974967050939958797621033453527142490554045575006784437524159058313661031693579275638287565882286477825200644317562717676824222500176313554987400723946758454523504814182398171548984964913647791941398784684580035628865322586835440221605411337442050609180938332766986939897758700249218099908454905318325739784722781912124142008010754575735528279846448862996935589739728579415017261589090787681148395358834277011025242807999202980382538141174554973681619441119543103993317813738287552791064898429258079349089694675324569797534598720969422810062576240596634497172435771242531214144189369631319016984815731851780612674639034457536504680105005358102951837321421128990082352281567162590257509081818830168476421933094213595353569248712350566098600826206391313955533932967105659678631794443472117346954785988704264681118694857298119289398590472280398763289961195677300136976345999602649809516248975281713474319037156689338158549179216815109088491098366999004748150072944718442168885521238470109712805941184684728618145988994717523714135962723191274981021979586937192065999812781543498963813825681125767686762007889580525183114260866523945585015222789505432036159738530349482563036505380686032435372338600016858121460342345125621287410221923498679950169629121371432567632667270538686726898565652743948069926885760660407581486588221727856988901681691118917791918883200791397793954794360005120450548664119626115035116120478582514605920116509682986519081190101129067036356703815435496122451679195031987156356141298847670471688218862700089422403626570375624965379432039055406231604399593190794840137697898835261882251232796776328556017279443325368415553146543447416945456328490972139362955119497134088403799910771327189416091579427433834103602589838777202169727609140702184768947401393278319479193418530218822390077359866668359614598115847614701457807657160115334535062941508176119636619489846056352373948741842589611022547730278993766394278375885607902329125682444064506638258689398105867555365495978997362992003295967953102157480579234519935484205164498660929382215157557327201890773685131383879315086779020539844687032752512382840290850068367460666284127373702116553825060138358663490672659511677354517266459510949294338327695412094459232842236084727228006277322224883554807587128853460594693158596027444500895308226947234517327700354235623571743707635067932234770244893379132152018546108722428500731256237774985620017643234260631880419632610331434083130744229111561258701952854972820935502142364336408795010906317748428617832010984991826381490251583770717057779052361866378884593087090660246644577914846800138566623881241531607332161635687317887722147912449596700852061355150408809698005419507852856730267272640492291821464631426447223933787695274977410300693938298312638890945894283686156862168176069923374382478931990797402066382375252667193324410139367349883229839357525447603523890080995635178008862530901136665830563713706974627254893380491820092608987544587797658760046515120681687784328568537756395255207027657694414153613989033227658635704312346449479823883252529096958673839671205845756221876128988579716916997443315840016095864735268571073110987785582370987652752703663332200988147199190435624311184739662824028265983523902137470593430442013334454176569258407503053434023943821227759521724540333880567503533041695353184145510578116623986637542215591163468922104276857064420275356924926328885835154290751581891465375329134285970710155118298458662139754475659557791501792838128444779899677319903681295900685691752360637835618449932697836090012421323780801961483711052014927657593393476392082466727678414995954991754119090705954896991721893985250595675976380595336380925246950278326559101409423868672520193168410621660871526416517699570717271456445630150787806200930163655372777086124740565252448954398619663362430469317618246588744678905004663496356495922417580201654605866199270000176227415527153078036452095093851766272337687569532998369678431148637276445767111246563411304479496703210829534409719834298866080782446354485216415335223879913206760428807267803959197933885154383506934222543469981145149045545786446093364976939038622185088360292024068203006984824439420409865951205911665064166720845366160488433218054447627701179542584882700215144714662870466395979693480789360461907642435832200945547491482681288154862651517158636288905118720685229902994814436029015274868819226928791231067111735445006502358148685638806514041107027426450423636396936156689865490923075464849443399870851740550635461593388341021346150254691476445382145352337520587586974673119652705124040433756997739761348044963030309920835858640862813812060709007996175896859288702833292225315044768542453387276149305874921471345217675071008076658360776416322111346019533299280610929923737449679299212370306557195839216889520032829142780264389175227522221381426540617721564876237087184258609023616125361031090283943645152798909526272311380883590575847802840818305446817577002216510656801981814804212012777602229971847024239315844151131496290935351454122175135428996029760622701202577832975094067872144949077442184472162866417200270825560753382007208474345783584850704455127329423986247611472926050840397407116196777398229044607446571923358465270765099559514774326910820704195611578737070228810011780436675257616119903213696002702247382520192885905482695053761364058430908455055576805940915118547574959395960395848389479327163840957857543117328613097069019366827840741613053473625103024980483039686599233263923493437160403982956661080428622945923617905081719282084332298591115087839630628496158966208147048574799656135457111055453461139812122995546773684967898264886255111915373919008552249595245148009347685541958612777522654777690538389554603097737699001986580503655610671194003721514707639125318542975868523943110513233185305533030578409992178763546571613412505922883298710838604139961077967009457478717234311681840188758422750339409800746277351538221455218060922296867260797876680991891973408253194291530674380877140153598479363381826883230950756087299621713128345418638682283460075496637058522296847682723651928874131122367956449847368104368529942818348664515168217126717607065616141956199151042639519917363339367117526404382489850024660296111871423125216690598352146304768443868280699276887424466138890596586450063507952487291595566959853141656423537226881572898611853153021256638915384762725320818276293503613415817715341145125763494577456506063643462518236040472678593697359278540813361130520636801404403938953823847688696583952136509659908670791964079672135467851842149570548498683574260494299690455655315360189361304002667107795405955257656145426173385894775527239047527632111370341793097478364887504209665117722811064079096554499571775056461447909510837691712440110568264896549838104211975032176306892158611330618501945058109534011068869812019681830111038828624297608548385968529101551713075009117642166969398052586193632631126996034617765973043364218361423027203926410230156280069939946956484284588228808526048209850895948579654447352645912883457316181649938149266048645705827476651491613166214190237519643807277695987193852923952962989007722909808998212281788056238908015815453896535850965595473499743299710432600445290444406223133366767384002242652025202820599590653215228019414924940951512673923554284018419335975338952019373655419810231113440441852246907744478786413781654023556983537690126095224983822904532827477448985836093276096351594951041203275079738608880888619036967372045833420198646157200935061329580537583560381125978589909782940759367741598411267155461807769620277615034939815040775615473400926165352464150046423950548941347799169605071203922745471032970025547947257315373122041951799285011101576362333466916823959096175259249861356901151093090928172123320759858325552365097404312838749002280521138659854379919308221391322729608583237340470691688388090137050603191674870585894407294658720421550070671774946708238440244935993122622306162389889670872972128228463336078351683624534302662145847208036909169067716649215161349435615865827380410079612344514820960729265440342784411946820372893054536552889208394433662464667888701498176865440231501846173685160139254559366254056309826670278155322794084732207637930823228533163975434945054100786262670811142163898907015275315268994254090324780095352414839779953937793125349568353143337341461917748557417698777245160128223651959446909787993689511780456414152809993407514004929140487804209541430959166234333513715902441339722417477863634659174588237803857213464712381826411975794511019449118604710466376803542201208000964561719884343471041528564422323130679338113798388795093620121150466547407884147852671939234208660292379050352835122299752486541304612068923885867903201642184152636979410117954414269689573077360235304331069802381337484800644362121642042543895926995990754882760927535721667783869987511588325936727515680723536417682432330685626498263919651602095074261412207518594743247090960571230429292767757985334851302920038303716558582730778906894150914934298234418720486482478334453133626941613130869030305228315021626162957353535022008589063583962466092024404205807605804661802811520230894435964969643443493831391408847949712159515934164180132736558551590791197598663708931604826147869858407612491822571388621834545640303477511623835006873825548731473021317285391350304702701161856856835596742179040398125035546793592993211509836483350113053635190339448656338224675864104243340632560817643529333822651902986877043062260727790373785851838805216288106612656623181428528216838486606269734145141032278486284198676943120108772794269057059130393631715427691718420998758892798810716287436288911502845550035503512199116207653165588291021022103719205996866520948414409467341789665932366620425782432967817619095001204467298201905145033024792202397772367051870699736545587571233625019561820678229634535587929289699618162938703545022677064552729950760121333540780494644107279385931163714899582814620507030512640228370533849036478245131119024575523457075660942482093184971192379356201917880616672678410590614077994196906067931734760691170178554251422543977800194495747957342078725725413703185931103856306553699304819588224339057002913934865973006010653236980211410159023663351461501857307018598718859032378785250378587398971983264544383288001421362623155589436683159230129779991441818133421053675709924148177203815352911900099526234392007654700066960275728405379013265593443242767509976002546076930478470740930860928832053939835647433424296265479721047323656648632873869025837300055891653822119639275283936571427021916627746263385391183867080433932542195431500465096336162135275746511261511018960564910837235873533265491521234791509840995559274347243257017663697403804397803924737621031800535375358688618561285774830710125447505415938635747516141Eu 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 WarSoldier Postado Junho 4, 2006 Autor Denunciar Share Postado Junho 4, 2006 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++... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Junho 4, 2006 Denunciar Share Postado Junho 4, 2006 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 William Rodrigues Postado Junho 5, 2006 Denunciar Share Postado Junho 5, 2006 Salve!Realmente é um grande problema cara. Bom, você pode, ou poderia, ir armazenando em um vetor, porém o esforço computacional para isso será alto (como dito pelo brother Graymalkin). É apenas uma idéia cara, mas acho que pode te ajudar.Abraços,William Rodrigues Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Acho q consegui uma classe para Postado Junho 6, 2006 Denunciar Share Postado Junho 6, 2006 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Ø£¡vë¡®'§® Postado Junho 6, 2006 Denunciar Share Postado Junho 6, 2006 Faz uma lista encadeada.....abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 WarSoldier Postado Junho 7, 2006 Autor Denunciar Share Postado Junho 7, 2006 Faz uma lista encadeada.....abraçosComo assim não entendi ...Lista encadeada? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Junho 7, 2006 Denunciar Share Postado Junho 7, 2006 Faz uma lista encadeada.....abraçosComo assim não entendi ...Lista encadeada?Mesmo com uma lista encadeada [1] o esforço computacional seria extremamente alto para, por exemplo, somar dois inteiros.[1] http://pt.wikipedia.org/wiki/Lista_encadeadaAbraços,Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Ø£¡vë¡®'§® Postado Junho 7, 2006 Denunciar Share Postado Junho 7, 2006 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! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Junho 8, 2006 Denunciar Share Postado Junho 8, 2006 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 WarSoldier Postado Junho 8, 2006 Autor Denunciar Share Postado Junho 8, 2006 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 fazPo 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 WarSoldier Postado Junho 9, 2006 Autor Denunciar Share Postado Junho 9, 2006 só está dificil para conseguir usar rsrsr mas ela calcula um numero com base, expoente e o N, de 1024 bits em apenas 0,353 segundos...isso num Pentium P60 ...b^e Mod n... alguém sabe o que é esse P60, o que equivale? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Visitante Postado Junho 9, 2006 Denunciar Share Postado Junho 9, 2006 O primeiro dos pentiums, de 60mhz Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Ø£¡vë¡®'§® Postado Junho 14, 2006 Denunciar Share Postado Junho 14, 2006 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 agradeceriaex: tente somar999+ 1ai 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!!!!!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Maruski Postado Setembro 29, 2006 Denunciar Share Postado Setembro 29, 2006 Alguém conseguiu utilizar a classe miracl, também estou tendo dificuldades para instalar mesmo seguindo o manual não consigo compilar os exemplos. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
WarSoldier
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
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.