求[a,b]范围内的所有质数的个位数之和与十位数之和的小值

本文介绍了作者在某次机考中遇到的一道题目,要求在[a, b]范围内找到所有质数,然后计算这些质数个位和十位数字之和的最小值。给定例子中,区间[151, 160]内质数的个位与十位数之和最小值为8。" 47313535,1092259,Android RelativeLayout布局陷阱解析,"['Android开发', 'UI设计', '布局管理', 'Android框架']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     最近做了某为的机考试题,2道题,一小时做完了,某为的效率还是蛮高的,提交完30分钟后就告诉考试通过了。其实平时忙于某宁的工作,很少有时间能像在学校里的时候,有时间去安心做题了。其中一题,拿出来分享下:

    题:输入任意正整数,假设后输入值大于前输入值,求[a,b]范围内的所有质数的个位数之和与十位数之和的小值。

          用户输入:151 160,输出:8

代码如下:

/*
 * FileName: HuaWeiTest
 * Date:     2020/2/23 08:39
 * Description: [a,b]范围内的所有质数个位数之和与十位数之和的小者
 * History: //修改记录
 * <author>      <time>      <version>    <desc>
 * 修改人姓名             修改时间            版本号                  描述
 */
package com.test;

import static java.util.stream.Collectors.toList;

import java.util.List;
import java.util.Scanner;
import java.util.stream.LongStream;

/**
 * 〈一句话功能简述〉<br>
 * 〈功能详细描述〉如:输入:151,160,输出:8
 *
 * @see [相关类/方法](可选)
 * @since [产品/模块版本] (可选)
 */
public class HuaWeiTest {
    public static void main(String[] args) {
        // 用户输入
        Scanner in = new Scanner(System.in);
        int low = in.nextInt();
        int high = in.nextInt();

        // 获取输入范围内质数集合
        List<Long> primeNumberList = getAllPrimeNumberByRange(Long.valueOf(low), Long.valueOf(high));

        // 计算要求中最小值
        int minSum = getMinSum(primeNumberList);

        System.out.println(minSum);
    }

    /**
     * 〈根据入参质数范围,获取该范围内的所有质数集合〉<br>
     * 〈功能详细描述〉
     *
     * @return
     * @Param
     * @see [相关类/方法](可选)
     * @since [产品/模块版本] (可选)
     **/
    private static List<Long> getAllPrimeNumberByRange(Long low, Long high) {
        return LongStream.rangeClosed(low, high).filter(num -> isPrime(num)).boxed().collect(toList());
    }

    /**
     * 〈判断一个数是否为质数〉<br>
     * 〈功能详细描述〉
     *
     * @Param
     * @return
     * @author
     * @see [相关类/方法](可选)
     * @since [产品/模块版本] (可选)
     **/
    private static boolean isPrime(Long number) {
        return LongStream.range(2, number).noneMatch(i -> number % i == 0);
    }

    /**
     * 〈在质数集合中,输入题目条件要求的十位数和个位数之和的最小值〉<br>
     * 〈功能详细描述〉
     *
     * @return
     * @Param
     * @see [相关类/方法](可选)
     * @since [产品/模块版本] (可选)
     **/
    private static int getMinSum(List<Long> primeNumberist) {
        // 如果质数集合为空,返回0
        if (null == primeNumberist || primeNumberist.size() == 0) {
            return 0;
        }
        int shiPositionSum = 0, gePositionSum = 0;
        for (Long prime : primeNumberist) {
            // 这块有很多方法,比如截取,取余等
            // 通过转换字符数据组的这种形式,看起来是较简单的
            char[] chars = String.valueOf(prime).toCharArray();

            String gePosition = Character.toString(chars[chars.length - 1]);
            String shiPosition = chars.length > 2 ? Character.toString(chars[chars.length - 2]) : "0";

            gePositionSum += Integer.valueOf(gePosition);
            shiPositionSum += Integer.valueOf(shiPosition);
        }

        // 返回其中小值
        return shiPositionSum < gePositionSum ? shiPositionSum : gePositionSum;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值