麥森數 高精度 快速冪

2021-08-16 06:08:48 字數 1049 閱讀 9390

快速冪模板:

求a^b:

int ans=1;

while(b!=0)

printf("%d\n",ans);

高精度乘高精度模板:

void cheng(int a,int b);

c[0]=a[0]+b[0];

for(int i=0;i10)}}

while(c[k]==0)c[0]--;

}

**如下:

#include#include#includeusing namespace std;

int ans[1000000],a[1000000];

void cheng(int x,int y);

c[0]=x[0]+y[0];

if(c[0]>500)c[0]=500;

for(int i=0;i10)}}

for(int i=0;i<=c[0];i++)x[i]=c[i];

}void print()

printf("\n");

}printf("\n");

}int main()

ans[1]--;

print();

}

本題的收穫和遇到的陷阱:

1.求2^p的位數:

2.在cheng()函式中,陣列ans,只用保留前500位就可以了不然會超時

3.在cheng()函式中開始設陣列c的大小為600,結果出現了「程式停止工作」

原因可能為:

a.野指標,你使用的指標指向未知區域

b.scanf函式輸入整形、字元……的時候缺少了&

c.緩衝區溢位,也就是說你使用陣列時不經意間越界了

顯然我犯得是c錯,雖然理論上陣列c只用前500位就行了,但是在x與y陣列相乘的時候位數會遠遠大於500,所以要開大點數

洛谷 P1045 麥森數(高精度 快速冪)

題目 標籤 高精度 快速冪 此題主要分為兩個部分,第乙個部分是求位數,第二部分是求最後500位數字。便於理解 下面 是普通的快速冪運算。對於本題的 muti1 相當於計算result a muti2 相當於計算a a 不同之處只是先用tmp臨時存起計算結果,再複製給相應的result和a。int q...

洛谷P1045 麥森數 快速冪 高精度乘法

題目大意 計算2p 12 p 1 2p 1 的位數和最後500位數字 用十進位制高精度數表示 題目分析 1 首先是計算位數 我們不難發現,2p 12 p 1 2p 1 和2 p2 p 2p在十進位制下的位數是相同的,因此,我們只需要計算2 p2 p 2p的位數,我們不妨設 1 0k 2 p10 k ...

洛谷P1045麥森數(高精度乘法)

這題分兩問 求位數,求後500位 求位數 公式log10 x 1,把冪移到前面即可 求後500位 其實如果讓求完整的數的話,那就麻煩了,數太多一定時間複雜度高 但現在是只求後500位啊!多的不用管只求這些就行啊,複雜度明顯降下來了!求再多次冪,快速冪二分不斷分 每次就500位這麼小的複雜度,所以一定...