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