恒生电子笔试 恒生电子笔试题 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多种语言版本,持续更新中。