1、基础知识
2、快速幂代码
- 非递归的快速幂(降低计算次数,达到O(logN))
//求n的l次方,当数值比较小的时候
public static long quickMi1(long n,long l){
long ans=1;
long base=n;
while(l>0){
if((l&1)!=0){
ans=ans*base;
}
base=base*base;
l=l>>1;
}
return ans;
}
- 实际情况中遇到的数可能比较大,可能计算的结果要取模 (公式2的规律,将a,b,c三个因子全部换成a,a,a进行推到)
//计算n的l次方对MOD取模(MOD=1000000007)
public static long quickMi2(long n,long l){
long ans=1;
long base=n%MOD;
while(l>0){
if((l&1)!=0){
ans=(ans*base)%MOD;
}
base=(base*base)%MOD;
l=l>>1;
}
return ans;
}
- 求n的1次方+n的2次方+…+n的l次方对k取模的结果(公式1的规律)
public class QuickMi {
/*
*
* 输入n l两个整数
* 求n的1次方+n的2次方+...+n的l次方对MOD取模的结果
* */
private static final int MOD=5;
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int l=sc.nextInt();
sc.close();
/*System.out.println(quickMi1(n, l));
System.out.println(quickMi2(n, l));*/
long res=0;
for(int i=1;i<=l;i++){
res+=quickMi3(n, i);
}
System.out.println(res%MOD);
}
public static int quickMi3(int n,int l){
int ans=1;
int base=n%MOD;
while(l>0){
if((l&1)!=0){
ans=(ans*base)%MOD;
}
base=(base*base)%MOD;
l=l>>1;
}
return ans;
}
}