题目描述:求幂
给出一个整数n,希望求出满足:ab=cd(1<=a,b,c,d<=n)的式子有多少?
输入:
2
输出:
6
当输入2时,会出现:
11=11
11=12
12=11
12=12
21=21
22=22
分析:a,b和c,d存在高度的对称性;
即a,b中出现的组合,在c,d中也出现,所以只需要求一组,然后将二者出现的个数相乘;
考虑输出很大,将结果对 1000000007求模运算
package com.bj.jingdong;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Test1 {
public static final int MOD_NUM = 1000000007;
//求幂运算: 如a^b
public static int intPow(int a,int b){
int result = 1;
for (int i = 0; i < b; i++) {
result *=a;
}
return result;
}
@SuppressWarnings("resource")
public static void main(String[] args) {
//1.读取一个整数
int num = new Scanner(System.in).nextInt();
//2.定义Map存储结果<值,出现次数>
Map<Integer,Integer> map = new HashMap<>();
for (int i = 1; i <=num; i++) {
for (int j = 1; j <=num; j++) {
// 如果出现过,次数+1
if(map.containsKey(intPow(i, j))){
map.put(intPow(i, j), map.get(intPow(i, j))+1);
}else{
map.put(intPow(i,j), 1);
}
}
}
// a,b与c,d是同理,所以将对应的值相乘求和即可
// 如何根据需要遍历map?
int sum_result = 0;
for (Integer num1:map.values()) {
// 根据高度相似的特点,将其平方求和
sum_result+=(intPow(num1,2));
}
sum_result%=MOD_NUM;
System.out.println(sum_result);
}
}
知识点:
1.Map与HashMap的定义、存储以及取值;
2.如何根据需求,遍历Map中的数据;
网友评论