10pts求调
查看原帖
10pts求调
681558
Weizhuo_Zhao楼主2024/5/18 21:14
#include <bits/stdc++.h>
using namespace std;
bool zs(int n);

int main() {
	string s;
	long long n = 1;
	cout << "Enter the number=\n";
	bool flag = false;
	while (!flag) {
		n = 0;
		cin >> s;
		flag = true;
		bool negative = false;
		for (int i = 0; i < s.size(); i++) {
			if (s[i] == '-' && (s[i + 1] >= '0' && s[i + 1] <= '9')) {
				negative = true;
				flag = false;
			}
			if (s[i] >= '0' && s[i] <= '9') {
				if (!negative) {
					n = n * 10 + (s[i] - '0');
					flag = false;
				}
			}
		}
		if (flag)
			continue;
		cout << "Prime? ";
		if (n > 40000000) {
			cout << "No!\nThe number is too large!";
		} else if (negative || n == 1 || (n == 0 && !flag)) {
			cout << "No!";
		} else if (zs(n) || n == 2) {
			cout << "Yes!";
		} else if (!zs(n) && n >= 4) {
			cout << "No!\n" << n << '=';
			bool b = true;
			for (int i = 2; i <= n; i++) {
				int k = 0;
				while ( !(n % i) ) {
					k++;
					n /= i;
				}
				if (k) {
					if (b) {
						cout << i << '^' << k;
						b = false;
					} else
						cout << '*' << i << '^' << k;
				}
			}
		}
		cout << "\n\nEnter the number=";
	}
}

bool zs(int n) {
	for (int i = 2; i <= int(sqrt(n + 0.5)); i++)
		if (n % i == 0)
			return false;
	return true;
}
2024/5/18 21:14
加载中...