美文网首页
求幂-(京东2018)

求幂-(京东2018)

作者: 天使的流浪 | 来源:发表于2019-01-04 11:10 被阅读0次

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

    相关文章

      网友评论

          本文标题:求幂-(京东2018)

          本文链接:https://www.haomeiwen.com/subject/vhlhrqtx.html