涉及的范围真的好广。。。
求A^B的最后三位数表示的整数。(1<=A,B<=10000)
一脸懵逼啊。。。
每次相乘的时候,只要取后三位就好的啦,我擦,怎么好笨啊。
package temp;
import java.util.Scanner;
public class Baidu1 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int A = in.nextInt();
int B = in.nextInt();
int ret, tmp;
ret = tmp = 1;
for (int i = 0; i < B; i++) {
ret = (A * ret) %1000;
}
System.out.print(ret);
}
}
使用A^(2*(B/2)),可以进一步的降低时间复杂度。
同时,也可以利用m*n%1000=((m%1000)*(n%1000))%1000
package temp;
import java.util.Scanner;
public class Baidu1 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int A = in.nextInt();
int B = in.nextInt();
int ret = helper(A, B);
System.out.print(ret);
}
public static int helper(int a, int b) {
if (b == 1) return a%1000;
int mid = b/2;
int t = helper(a, mid);
if (b%2 == 1) {//奇数
return ((a%1000)*t%1000)*t%1000;
}
return t*t%1000;
}
}