算法系列之第九屆藍橋杯Java B組第三題複數冪

複數冪

題目:設i爲虛數單位。對於任意正整數n,(2+3i)^n 的實部和虛部都是整數。 求 (2+3i)^123456 等於多少?
即(2+3i)的123456次冪,這個數字很大,要求精確表示。答案寫成 "實部±虛部i"
的形式,實部和虛部都是整數(不能用科學計數法表示),中間任何地方都不加空格,實部爲正時前面不加正號。(2+3i)^2 寫成: -5+12i,
(2+3i)^5 的寫成: 122-597i

注意:需要提交的是一個很龐大的複數,不要填寫任何多餘內容。

思路:就是用暴力法解決,只是看到這個“很龐大的複數”我真的很慌,到底多大才算很龐大呢,百度了一下有的大佬貼出了10kb的數據,

真的是好龐大,但是小編算出來的也就是個19位數,不知道算不算龐大~

代碼實現:

package 第九屆藍橋杯;
/**
* 標題:複數冪
設i爲虛數單位。對於任意正整數n,(2+3i)^n 的實部和虛部都是整數。
求 (2+3i)^123456 等於多少? 即(2+3i)的123456次冪,這個數字很大,要求精確表示。
答案寫成 "實部±虛部i" 的形式,實部和虛部都是整數(不能用科學計數法表示),中間任何地方都不加空格,實部爲正時前面不加正號。(2+3i)^2 寫成: -5+12i,
(2+3i)^5 的寫成: 122-597i
注意:需要提交的是一個很龐大的複數,不要填寫任何多餘內容
* @author 小蘿蔔頭
*
*/
public class 第三題複數冪 {
public static void main(String[] args) {
long a=2,fir=2;
long b=3,sed=3;
long c=0,thi=0;
for(int i=2;i<=123456;i++){
thi=-(b*sed);
//System.out.print(thi+" ");
sed=a*sed+b*fir;
//System.out.print(sed+" ");
fir=a*fir+thi;
//System.out.println(fir+" ");
}
if(sed>=0)
System.out.println(fir+"+"+sed+"i");
else{
System.out.println(fir+""+sed+"i");
}
}

}
答案是:4043220979119144065-7374402350132176768i

小夥伴們可以通過與手算的數進行驗證,小編驗證1~7的均正確,所以認爲代碼是正確的。

i<=2時:-5+12i

i<=3時:-46+9i

i<=4時:-119-120i

i<=5時:122-597i

i<=6時:2035-828i

i<=7時:6554+4449i

如果這個題目有不懂的,可以評論去區見哦~等着你哦~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章