复数幂
题目:设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
如果这个题目有不懂的,可以评论去区见哦~等着你哦~