用c++编写对给定区间[m,n]的正整数分解质因数,口每一整数表示为质因数从 小到大顺序的乘积形式。如果被分解的数本身是素数,则注明为素数。 例如,2012=2*2*503,2011=(素数!)。
时间: 2023-06-12 21:05:43 浏览: 86
我用C++编的一个数学小程序(测试素数并分解因数)
下面是用C语言编写的代码:
```c
#include <stdio.h>
#include <math.h>
int main() {
int m, n, i, j, flag;
printf("请输入区间[m,n]的值:\n");
scanf("%d %d", &m, &n);
printf("区间[%d,%d]内每个数的质因数分解如下:\n", m, n);
for (i = m; i <= n; i++) {
printf("%d=", i);
if (i == 1) {
printf("1\n");
continue;
}
flag = 0;
for (j = 2; j <= sqrt(i); j++) {
while (i % j == 0) {
if (flag == 0) {
printf("%d", j);
flag = 1;
} else {
printf("*%d", j);
}
i /= j;
}
}
if (i != 1) {
if (flag == 0) {
printf("%d", i);
} else {
printf("*%d", i);
}
} else if (flag == 0) {
printf("素数!");
}
printf("\n");
}
return 0;
}
```
输入区间的起始值和终止值后,程序会依次对区间内的每个整数进行质因数分解,并输出每个数的结果。程序先判断当前数是否为1,如果是,直接输出1。否则,程序从2开始循环到该数的平方根,如果该数被2~sqrt(i)之间的某个整数整除,则输出该数,并将该数除以该整数。如果该数最后不为1,则说明该数是一个大于sqrt(i)的质数,输出该数即可。如果该数在整个过程中没有被输出过,则说明该数是一个素数,输出“素数!”即可。
阅读全文