求幂-(京东2018)

题目描述:求幂
给出一个整数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 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中的数据;

你可能感兴趣的:(求幂-(京东2018))