递归快速幂:
import java.util.*;
import java.io.*;
public class Main{
public static void main(String[] args){
quickin in = new quickin();
PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));
int a = in.nextInt();
int n = in.nextInt();
pw.println(qpow(a,n));
pw.flush();
}
public static int qpow(int a,int n){
if(n==0){
return 1;
}else if(n%2==1){
return qpow(a,n-1)*a;
}else{
int tem=qpow(a,n/2);
return tem*tem;
}
}
}
class quickin{
BufferedReader br;
StringTokenizer st;
quickin(){
br = new BufferedReader(new InputStreamReader(System.in));
}
boolean hasNext(){
while(st==null||!st.hasMoreElements()){
try{
st = new StringTokenizer(br.readLine());
}catch(Exception e){
return false;
}
}
return true;
}
String next(){
if(hasNext()) return st.nextToken();
return null;
}
int nextInt(){
return Integer.parseInt(next());
}
}
非递归快速幂:
import java.util.*;
import java.io.*;
public class Main{
public static void main(String[] args){
quickin in = new quickin();
PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));
int a = in.nextInt();
int n = in.nextInt();
pw.println(qpow(a,n));
pw.flush();
}
public static int qpow(int a,int n){
int ans =1;
while(n!=0){
if((n&1)==1){//n%2==1;
ans*=a;
}
a*=a;
n>>=1;//n/=2;
}
return ans;
}
}
class quickin{
BufferedReader br;
StringTokenizer st;
quickin(){
br = new BufferedReader(new InputStreamReader(System.in));
}
boolean hasNext(){
while(st==null||!st.hasMoreElements()){
try{
st = new StringTokenizer(br.readLine());
}catch(Exception e){
return false;
}
}
return true;
}
String next(){
if(hasNext()) return st.nextToken();
return null;
}
int nextInt(){
return Integer.parseInt(next());
}
}