ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

分解质数相乘——记一次有技术含量的笔试骗A

2021-09-05 10:32:31  阅读:178  来源: 互联网

标签:divide int 质数 笔试 util 相乘 import sb


9.4号做了一套兴业银行的笔试题,其中编程题的要求是这样的:输入一个数,输出这个数由质数相乘的表达式,例如

456=2*2*2*3*19,132=2*2*3*11,并且质数要从小打到大排列

做这道题之前我从来没有接触过质数的问题,但是我想,将一个数分解成由质数相乘,那我写一个质数数组,然后逐个相除判断,如果能够整除一个质数,那么就记录下来,经过整除判断循环以后输入数变为1,就完成了

我的第一版代码是这样的:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int n = s.nextInt();
        printAns(n);
    }

    private static void printAns(int n) {
        //自己构造的一个质数数组,范围有限,能够A就行了
        int[] num = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 39, 41, 43};
        //记录最开始的数
        int param = n;
        List<Integer> ans = new ArrayList<>();
        //n == 1时说明操作完成
        while (n != 1) {
            for (int divide : num) {
                if (n % divide == 0) {
                    //如果能够整除,用list记录
                    ans.add(divide);
                    //更新n
                    n /= divide;
                }
            }
        }
        //对质数进行排序
        Collections.sort(ans);
        StringBuilder sb = new StringBuilder();
        sb.append(param).append("=");
        for (int number : ans) {
            sb.append(number).append("*");
        }
        sb.deleteCharAt(sb.length() - 1);
        System.out.println(sb);
    }
}

这一版代码只能够A83,因为忽略了输入本身就是一个质数的情况,例如13=1*13

修改之后就能够全A了

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int n = s.nextInt();
        printAns(n);
    }

    private static void printAns(int n) {
        int[] num = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 39, 41, 43};
        //记录最开始的数
        int param = n;
        List<Integer> ans = new ArrayList<>();
        while (n != 1) {
            for (int divide : num) {
                //如果输入就是质数,直接输出
                if (param == divide) {
                    System.out.println(param + "=1*" + param);
                    return;
                }
                //其余的操作和第一版一样
                if (n % divide == 0) {
                    ans.add(divide);
                    n /= divide;
                }
            }
        }
        Collections.sort(ans);
        StringBuilder sb = new StringBuilder();
        sb.append(param).append("=");
        for (int number : ans) {
            sb.append(number).append("*");
        }
        sb.deleteCharAt(sb.length() - 1);
        System.out.println(sb);
    }
}

标签:divide,int,质数,笔试,util,相乘,import,sb
来源: https://www.cnblogs.com/zjytrhy/p/15228755.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有