2013-04-10 111 views
-3

如果可能,如何在matlab中实现big int?在MATLAB中实现big int

base = 115740200527109164239523414760926155534485715860090261532154107313946218459149402375178179458041461723723231563839316251515439564315555249353831328479173170684416728715378198172203100328308536292821245983596065287318698169565702979765910089654821728828592422299160041156491980943427556153020487552135890973413 

exp = 16205962307261760189575459786273943315321167650525279039226402620183364231925409315656258599329538647429058153827986967502066336581939528313657921572960065150727259976179025776971363924442875150959953467637629858540057691397256164559842414074042495886675668598268975047781126857869572720344318367729860654075 

mod = 1243253391468893845404940910854566300098568827418728061817312790184918208001194600223674037697950082500211917675834232214791856090660592263012501671640840412798375666268811197726759842581630629269540465454853684584044451666823800713702748106715019167893619562722261057233176795620

这是我需要计算modexp(base,exp,mod)

+1

非常ununderstandable – Maroun 2013-04-10 20:33:54

+1

- 认真吗?或者你只是在拖钓?如果是这样,现在出去。 – 2013-04-10 20:36:27

回答

5

它已经是实现,因为你可以使用vpi,对文件交换的发现。

base = vpi('115740200527109164239523414760926155534485715860090261532154107313946218459149402375178179458041461723723231563839316251515439564315555249353831328479173170684416728715378198172203100328308536292821245983596065287318698169565702979765910089654821728828592422299160041156491980943427556153020487552135890973413'); 

expon = vpi('16205962307261760189575459786273943315321167650525279039226402620183364231925409315656258599329538647429058153827986967502066336581939528313657921572960065150727259976179025776971363924442875150959953467637629858540057691397256164559842414074042495886675668598268975047781126857869572720344318367729860654075'); 

modulus = vpi('1243253391468893845404940910854566300098568827418728061817312790184918208001194600223674037697950082500211917675834232214791856090660592263012501671640840412798375666268811197726759842581630629269540465454853684584044451666823800713702748106715019167893619562722261057233176795620'); 

powermod(base,expon,modulus) 
ans = 
96688554274778609934477562662404606264395384510288145077254270650448790387722984014247388006652841434990300433933136603474993407330696644666217689882824803664362981750613122185159564556754728021340332299439811221240883496369370843657919287413245488923703097829207075814277190552896301852217610348268590146354                   

或者,你可以自己写。这并不困难,只是非常耗时。

顺便说一句,使用像exp和mod这样的变量名称是一个可怕的想法。学习不要使用相同名称的变量重载MATLAB中的宝贵功能。

+0

你是'vpi'函数的作者,如果是的话,我刚刚看到它。令人惊叹的功能。我只能做+1(想做更多:)) – 2013-04-10 22:45:17

+0

是的,vpi是我的。感谢名单。 – 2013-04-11 14:56:41

3

额外功能的前往位置通常是Java API

例如,你可以使用BigInteger的Java类中Matlab的如下:

baseValue = java.math.BigInteger('115740200527109164239523414760926155534485715860090261532154107313946218459149402375178179458041461723723231563839316251515439564315555249353831328479173170684416728715378198172203100328308536292821245983596065287318698169565702979765910089654821728828592422299160041156491980943427556153020487552135890973413') 
expValue = java.math.BigInteger('16205962307261760189575459786273943315321167650525279039226402620183364231925409315656258599329538647429058153827986967502066336581939528313657921572960065150727259976179025776971363924442875150959953467637629858540057691397256164559842414074042495886675668598268975047781126857869572720344318367729860654075') 
modValue = java.math.BigInteger('1243253391468893845404940910854566300098568827418728061817312790184918208001194600223674037697950082500211917675834232214791856090660592263012501671640840412798375666268811197726759842581630629269540465454853684584044451666823800713702748106715019167893619562722261057233176795620') 

result = baseValue.modPow(expValue, modValue) 

返回: “如果没有可能如何实现在MATLAB大整数”

result = 
96688554274778609934477562662404606264395384510288145077254270650448790387722984014247388006652841434990300433933136603474993407330696644666217689882824803664362981750613122185159564556754728021340332299439811221240883496369370843657919287413245488923703097829207075814277190552896301852217610348268590146354