如果可能的话,如何在matlab中实现big int?
base = 115740200527109164239523414760926155534485715860090261532154107313946218459149402375178179458041461723723231563839316251515439564315555249353831328479173170684416728715378198172203100328308536292821245983596065287318698169565702979765910089654821728828592422299160041156491980943427556153020487552135890973413
exp = 16205962307261760189575459786273943315321167650525279039226402620183364231925409315656258599329538647429058153827986967502066336581939528313657921572960065150727259976179025776971363924442875150959953467637629858540057691397256164559842414074042495886675668598268975047781126857869572720344318367729860654075
mod = 124325339146889384540494091085456630009856882741872806181731279018491820800119460022367403769795008250021191767583423221479185609066059226301250167164084041279837566626881119772675984258163062926954046545485368458404445166682380071370274810671501916789361956272226105723317679562001235501455748016154805420913
我需要计算modexp(base,exp,mod)
答案 0 :(得分:5)
已经实现了,因为你可以使用vpi,就像在文件交换中找到的一样。
base = vpi('115740200527109164239523414760926155534485715860090261532154107313946218459149402375178179458041461723723231563839316251515439564315555249353831328479173170684416728715378198172203100328308536292821245983596065287318698169565702979765910089654821728828592422299160041156491980943427556153020487552135890973413');
expon = vpi('16205962307261760189575459786273943315321167650525279039226402620183364231925409315656258599329538647429058153827986967502066336581939528313657921572960065150727259976179025776971363924442875150959953467637629858540057691397256164559842414074042495886675668598268975047781126857869572720344318367729860654075');
modulus = vpi('124325339146889384540494091085456630009856882741872806181731279018491820800119460022367403769795008250021191767583423221479185609066059226301250167164084041279837566626881119772675984258163062926954046545485368458404445166682380071370274810671501916789361956272226105723317679562001235501455748016154805420913');
powermod(base,expon,modulus)
ans =
96688554274778609934477562662404606264395384510288145077254270650448790387722984014247388006652841434990300433933136603474993407330696644666217689882824803664362981750613122185159564556754728021340332299439811221240883496369370843657919287413245488923703097829207075814277190552896301852217610348268590146354
或者,你可以自己写。这并不困难,只是耗费时间。
顺便说一下,使用exp和mod之类的变量名是一个可怕的想法。学习不要在MATLAB中使用相同名称的变量重载有价值的函数。
答案 1 :(得分: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