-3

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

base = 115740200527109164239523414760926155534485715860090261532154107313946218459149402375178179458041461723723231563839316251515439564315555249353831328479173170684416728715378198172203100328308536292821245983596065287318698169565702979765910089654821728828592422299160041156491980943427556153020487552135890973413

exp = 16205962307261760189575459786273943315321167650525279039226402620183364231925409315656258599329538647429058153827986967502066336581939528313657921572960065150727259976179025776971363924442875150959953467637629858540057691397256164559842414074042495886675668598268975047781126857869572720344318367729860654075

mod = 124325339146889384540494091085456630009856882741872806181731279018491820800119460022367403769795008250021191767583423221479185609066059226301250167164084041279837566626881119772675984258163062926954046545485368458404445166682380071370274810671501916789361956272226105723317679562001235501455748016154805420913

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

4

2 回答 2

6

它已经实现,因为您可以使用vpi,如在文件交换中找到的那样。

base = vpi('115740200527109164239523414760926155534485715860090261532154107313946218459149402375178179458041461723723231563839316251515439564315555249353831328479173170684416728715378198172203100328308536292821245983596065287318698169565702979765910089654821728828592422299160041156491980943427556153020487552135890973413');

expon = vpi('16205962307261760189575459786273943315321167650525279039226402620183364231925409315656258599329538647429058153827986967502066336581939528313657921572960065150727259976179025776971363924442875150959953467637629858540057691397256164559842414074042495886675668598268975047781126857869572720344318367729860654075');

modulus = vpi('124325339146889384540494091085456630009856882741872806181731279018491820800119460022367403769795008250021191767583423221479185609066059226301250167164084041279837566626881119772675984258163062926954046545485368458404445166682380071370274810671501916789361956272226105723317679562001235501455748016154805420913');

powermod(base,expon,modulus)
ans =
96688554274778609934477562662404606264395384510288145077254270650448790387722984014247388006652841434990300433933136603474993407330696644666217689882824803664362981750613122185159564556754728021340332299439811221240883496369370843657919287413245488923703097829207075814277190552896301852217610348268590146354                                                                        

或者,您可以自己编写。没那么难,就是比较费时间。

顺便说一句,使用像 exp 和 mod 这样的变量名是一个可怕的想法。学习不要在 MATLAB 中使用同名变量重载有价值的函数。

于 2013-04-10T21:06:17.797 回答
3

额外功能的首选位置通常是Java API

例如,您可以在 Matlab 中使用 BigInteger java 类,如下所示:

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

result    = baseValue.modPow(expValue, modValue)

回报:

result =
96688554274778609934477562662404606264395384510288145077254270650448790387722984014247388006652841434990300433933136603474993407330696644666217689882824803664362981750613122185159564556754728021340332299439811221240883496369370843657919287413245488923703097829207075814277190552896301852217610348268590146354
于 2013-04-10T21:25:39.693 回答