以下prim函数的功能是分解质因数。括号内的内容应该为?
1
2
3
4
5
6
7
8
9
10
|
void prim( int m, int n) { if (m >= n) { while ( ) n++; ( ); prim(m, n); cout << n << endl; } } |
n从2开始
第一处为m%n,代表取余。当余数是0的时候表示除尽,跳出while循环,即找出一个质因数。此时一个质因数即为n
然后 m/=n 即让m除去这个质因数,然后再进入求新m质因数的递归。
举例:m=6,n=2
m>n;
m%n=0,跳出while,n没有加1。此时m=6,n=2
m/=n,此时m=3,n=2 (2为一个质因数)
递归prim(m, n),即prim(3, 2);
m>n;
m%n=1,n++,此时m=3,n=3,继续while循环
m%n=0,跳出while循环,此时 m=3,n=3 (3为另一个质因数)
m/=n,此时m=1,n=3
递归 prim(m, n),即 prim(1, 3);
不满足条件(m > n),返回上层
输出质因数 n=3
输出质因数 n = 2
一个实际分解质因数的C语言程序
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
int n;
printf("请输入一个大于0的整数:");
cin >> n;
printf("分解结果:");
for (int i =2; i <= n; i++)
{
while (n>=i)
{
if(n%i==0)
{
if (n == i)
{
printf("%d", i);
n = n / i;
}
else
{
printf("%d*", i);
n = n / i;
}
}
else
{
break;
}
}
}
return 0;
}