计算小点的数的因式分解
#include <iostream>
#include <math.h>
using namespace std;
void primeFactors(int n) {
// 输出所有的2因子
while (n % 2 == 0) {
cout << "2 ";
n = n / 2;
}
// 输出所有的奇素数因子
for (int i = 3; i <= sqrt(n); i = i + 2) {
while (n % i == 0) {
cout << i << " ";
n = n / i;
}
}
// 如果n是一个大于2的素数,则输出它本身
if (n > 2)
cout << n << " ";
}
int main() {
int n;
cout << "请输入要分解的数:";
cin >> n;
cout << "因式分解为:";
primeFactors(n);
return 0;
}
计算100!的因式分解
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1005;
int primes[MAXN], factor_num[MAXN]; // primes数组存放质数,factor_num数组存放该因子出现的次数
void prime_factorization(int n) {
for (int i = 2; i <= n; i++) {
int x = i;
for (int j = 0; primes[j] && primes[j] <= x; j++) { // 试除质因数
while (x % primes[j] == 0) {
factor_num[j]++;
x /= primes[j];
}
}
if (x > 1) { // 若剩余的因子为质数,则加入primes数组中
for (int j = 0; primes[j]; j++) {
if (primes[j] == x) {
factor_num[j]++;
break;
}
else if (primes[j+1] == 0) {
primes[j+1] = x;
factor_num[j+1] = 1;
break;
}
}
}
}
}
int main() {
memset(primes, 0, sizeof(primes));
memset(factor_num, 0, sizeof(factor_num));
primes[0] = 2;
prime_factorization(100);
cout << "100!的质因数分解形式为:" << endl;
for (int i = 0; primes[i]; i++) {
cout << primes[i] << "^" << factor_num[i] << " * ";
}
cout << endl;
return 0;
}
程序的主要思路是先试除2~n之间的所有质数,将每个因子出现的次数记录在factor_num数组中。如果剩余的因子为质数,则加入primes数组中,并将其出现次数置为1。最后输出每个因子的指数,即可得到100!的质因数分解形式。