麥森數(陣列模擬大數 快速冪)

2021-09-25 22:02:26 字數 827 閱讀 6507

麥森數

題目描述

求2^p-1的位數和後五百位數

思路求位數的話可以直接推斷

12345的位數為5

1000010位數為7

多寫幾組就可以知道位數是lg(n)+1;對於2^p-1的位數直接代入即可。計算時因為只有100,1000,10000減一與本身位數差一,而2的冪次不會出現這樣的值,所以直接求2的p次方的冪次即可。

求後五百位數值

對於我來說是個難題,尤其還是高精度問題,直接求肯定會超時

求2的p次方可以想到快速冪,用快速冪解決了時間複雜度,但高精度還是個問題

解決高精度,可以用陣列模擬大數的方法,用陣列儲存數

for(int i=0;i<500;i++)

for(int j=0;j<500-i;j++)

c[i+j]+=x[i]*y[j];

for(int i=0;i<500;i++)

**

#includeusing namespace std;

int a[510],b[510];//陣列a儲存後五百位數,陣列b儲存2的冪次

int p;

//陣列模擬大數乘法

void mul(int x,int y)

for(int i=0;i<500;i++)

x[i]=c[i];

}void solve()

a[0]--;//2^p-1

}int main()

else

cout<}

//cout

}

C 模擬大數乘法 以及 大數階乘

大數階乘 最最最重要的總結部分 寫在開頭 大數的運算一直以來都是乙個具有研究性的問題,自己動手模擬了一下筆算乘法,以及由乘法拓展出來的階乘,和大家分享一下思路及 比如50的階乘結果是65位,而 int 的範圍是 10 9,long long 的範圍是 10 18 模擬筆算乘法,如圖 由於我們對筆算乘...

PAT乙級1017 A處以B(模擬大數除法)

本題要求計算 a b,其中 a 是不超過 1000 位的正整數,b 是 1 位正整數。你需要輸出商數 q 和餘數 r,使得 a b q r 成立。輸入在一行中依次給出 a 和 b,中間以 1 空格分隔。在一行中依次輸出 q 和 r,中間以 1 空格分隔。123456789050987654321 7...

九度OJ 1398 移動次數 (陣列,模擬)

題目1398 移動次數 時間限制 1 秒 記憶體限制 32 兆 特殊判題 否 提交 1375 解決 369 題目描述 眾所周知jobdu旗下的jobbala公司是一家以個性 親民著稱的it公司。在jobbala公司成立50周年的日子裡,公司ceo組織全體員工登山旅遊。按照往常的習慣,導遊通常要求遊客...