恒生电子笔试 恒生电子笔试题 0321

笔试时间:2024年03月21日

历史笔试传送门:2023秋招笔试合集

第一题

题目

给出一个正整数,请写一个算法来判断该数是质数还是合数,如果是合数,需输出该合数的质数因子。

说明:直接使用开发语言提供的函数不得分。

判断:8 13 99 177 8888是质数还是合数。

输入描述

8 13 99 177 8888

输出描述

质数 或者 合数

样例输入

100

样例输出

[100]是合数.

100=2*2*5*5

说明

整数100是合数,拆分后的质数因子为:2*2*5*5。

参考题解

首先判断一个数是否是质数;再找出该合数的所有质因子:从i=2开始,如果n可以被i整除,那就不断的除,并保存i;不能被整除,那就i++;不断迭代。

C++:[此代码未进行大量数据的测试,仅供参考]

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
using namespace std;

int main() {
    int n; cin >> n;
    if (n == 1) {
        return 0;
    }
    bool prime = true;
    for (int i = 2; i <= sqrt(n); ++i) {
        if (n % i == 0) {
            prime = false;
            break;
        }
    }
    if (prime) {
        printf("[%d]是质数.", n);
        return 0;
    }
    printf("[%d]是合数.\n", n);
    vector<int> arr;
    int m = n;
    for (int i = 2; i <= sqrt(n); ++i) {
        while (n % i == 0) {
            n /= i;
            arr.push_back(i);
        }
    }
    if (n != 1) arr.push_back(n);
    string s = to_string(m) + "=";
    for (int e : arr) s += to_string(e) + "*";
    s.pop_back();
    printf("%s", s.c_str());
}

Java:[此代码未进行大量数据的测试,仅供参考]

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        if (n == 1) {
            return;
        }
        boolean prime = true;
        for (int i = 2; i <= Math.sqrt(n); ++i) {
            if (n % i == 0) {
                prime = false;
                break;
            }
        }
        if (prime) {
            System.out.printf("[%d]是质数.", n);
            return;
        }
        System.out.printf("[%d]是合数.\n", n);
        List<Integer> arr = new ArrayList<>();
        int m = n;
        for (int i = 2; i <= Math.sqrt(n); ++i) {
            while (n % i == 0) {
                n /= i;
                arr.add(i);
            }
        }
        if (n != 1) arr.add(n);
        StringBuilder s = new StringBuilder(Integer.toString(m) + "=");
        for (int e : arr) s.append(e).append("*");
        s.deleteCharAt(s.length() - 1);
        System.out.print(s.toString());
    }
}

Python:[此代码未进行大量数据的测试,仅供参考]

import math

n = int(input())
if n == 1:
    exit()
prime = True
for i in range(2, math

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2024 BAT笔试合集 文章被收录于专栏

持续收录字节、腾讯、阿里、美团、美团、拼多多、华为等笔试题解,包含python、C++、Java多种语言版本,持续更新中。

全部评论

相关推荐

点赞 5 评论
分享
牛客网
牛客企业服务