【问题描述】
请编写一个函数,完成以下计算:在主函数中接受输入整数N(N>0),调用函数计算并输出N的所有为素数的正因数,若没有则在返回主函数以后输出No Answer。
【输入形式】
从控制台输入整数N。
【输出形式】
按照从小到大的顺序,在一行上输出N的所有为素数的正因数,各个正因数之间用一个空格分隔,若没有则输出No Answer。
【样例输入】 36
【样例输出】 2 3
【样例输入】 1
【样例输出】 No Answer
【样例说明】
输入的整数N为36,36的所有正因数为1、2、3、4、6、9、12、18、36,其中只有2和3为素数,所以输出2 3。
#include <iostream>
#include <math.h>
using namespace std;
bool isprime(int n);
void PrimeFactor(int n);
int main()
{
int N;
cin >> N;
PrimeFactor(N);
}
bool isprime(int n)
{
for( int i=2; i<=sqrt(n); ++i )
if( n%i == 0 ) return false;
return true;
}
void PrimeFactor(int n)
{
bool key = 0;
for( int i=2; i<=n/2; ++i )
{
if( n%i == 0 && isprime(i) && key == 1 )//如果测试的数字不是2
cout << " " << i;
else if( n%i == 0 && isprime(i) && key == 0 )//如果第一次进入(即测试数字2)
{
cout << "2";
key = 1;
}
}
if( key==0 ) cout << "No Answer";
cout << endl;
}