输入一个正整数,如果不是素数,求该正整数的质数因子。使用递归算法实现。
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
bool isPrime(int n)
{
if (n < 2)
{
return false;
}
if (n == 2)
{
return true;
}
for (int i = 2; i < n; i++)
{
if (n % i == 0){
return false;
}
}
return true;
}
void primeFactor(int n, vector<int> &ob)
{
if (isPrime(n))
{
ob.push_back(n);
}
else
{
for (int i = 2; i < n; i++)
{
if (n % i == 0)
{
ob.push_back(i);
primeFactor(n / i, ob);
break;
}
}
}
}
void printPrime(int m, int n)
{
cout << m << "到" << n << "之间的素数:" << endl;
for (int i = m; i < n; i++)
{
if (isPrime(i))
{
cout << i << "\t";
}
}
cout << endl << endl;
}
void test()
{
int n;
cout << "请输入正整数:";
cin >> n;
cout << endl;
if (n == 1)
{
cout << "1既不是素数也不是合数!" << endl << endl;
return;
}
if (isPrime(n))
{
cout << n << "是素数!" << endl << endl;
return;
}
vector<int> result;
primeFactor(n, result);
sort(result.begin(), result.end());
cout << n << " = ";
for (int i = 0; i < result.size(); i++)
{
if (i == result.size() - 1)
{
cout << result[i] << endl;
}
else
{
cout << result[i] << " * ";
}
}
cout << endl;
}
int main()
{
printPrime(1, 100);
int count = 12;
while (true)
{
count--;
test();
if (count <= 0)
{
break;
}
}
return 0;
}
结果如下:
1到100之间的素数:
2 3 5 7 11 13 17 19 23 29
31 37 41 43 47 53 59 61 67 71
73 79 83 89 97
请输入正整数:100
100 = 2 * 2 * 5 * 5
请输入正整数:1024
1024 = 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2
请输入正整数:789
789 = 3 * 263
请输入正整数:12345
12345 = 3 * 5 * 823
请输入正整数:666666
666666 = 2 * 3 * 3 * 7 * 11 * 13 * 37
请输入正整数:97
97是素数!
注意:输入的正整数不能超过最大值。
网友评论