2019-03-21 蓝桥杯第九届 java 复数冥
2019-03-21 本文已影响0人
Daniel梁
标题:复数幂
设i为虚数单位。对于任意正整数n,(2+3i)^n 的实部和虚部都是整数。
求 (2+3i)^123456 等于多少? 即(2+3i)的123456次幂,这个数字很大,要求精确表示。
答案写成 "实部±虚部i" 的形式,实部和虚部都是整数(不能用科学计数法表示),中间任何地方都不加空格,实部为正时前面不加正号。(2+3i)^2 写成: -5+12i,
(2+3i)^5 的写成: 122-597i
注意:需要提交的是一个很庞大的复数,不要填写任何多余内容。
思路:首先这题要知道一个公式
(a+bi)*(c+di) = ac + adi + cbi + bdi^2 = (ac-bd) + adi + cbi 即i的平方变成-1 按照复数冥的公式得出只有i的式子
(2-3i)^2 = 4 - 9 + 2(2x3xi) = -5 * 12i 这也是为什么题目会得出这样的数的原因
使用long就可以做出来,使用bigInteger会有正负号判断,过于繁琐
下面就是通过得出的long3 + long4i 再与原来的(2 + 3i)无限运算得出最终答案
long3为答案实部 而long4为虚部
答案 4043220979119144065-7374402350132176768i
#### 可以用excel做哦这题 比如在B2输入(2+3*i) 在B3插入power函数,(B2 ,123456 ) 然后B3就会得到答案
public class Solution {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Long long1 = Long.valueOf(2);
Long long2 = Long.valueOf(3);
Long long3 = Long.valueOf(2);
Long long4 = Long.valueOf(3);
Long real = Long.valueOf(1);
for (int i = 2; i < 123457; i++) {
//实部
real = long1*long3;
//i
Long fake1 = long1*long4;
//i
Long fake2 = long2*long3;
//i^2
Long fake3 = long2*long4;
long3 = real - fake3;
//(a+bi)*(c+di) = ac + adi + cbi + bdi^2 = (ac-bd) + adi + cbi 即i的平方变成-1 按照复数冥的公式得出只有i的式子
// (2-3i)^2 = 4 - 9 + 2(2*3*i) = -5 * 12i
long4 = fake1 + fake2;
}
System.out.print(long3);
if (long4<0)
System.out.print(long4+"i");
else
System.out.print("+"+long4+"i");
}
}