发布网友 发布时间:3小时前
共1个回答
热心网友 时间:19分钟前
#include <stdio.h>
#include <math.h>
int isPrime(int n) { // n是质数返回1,否则返回0
int flag = 1; // 标志
if(n < 2) return 0; // 质数大于1
for(int i = 2; i <= sqrt(n) && flag; ++i) {
if(n % i == 0) flag = 0; // 能整除,就不是质数
}
return flag;
}
int main() {
int n,an,flag;
while(1) {
printf("输入一个整数(0 -- 65535):");
if(scanf("%d",&n) != 1 || n < 0 || n > 65535) {
printf("数据错误。\n");
fflush(stdin); // 刷新键盘输入缓冲区用以清除非数字字符响应scanf("%d",&n)
continue;
}
printf("%d = ",n);
flag = 1; // 输出格式控制标志
for(int i = 2; i <= n; ++i) {
if(n % i == 0 && isPrime(i)) {
if(flag) { // 第一个质因子的输出格式
printf("%d",i);
flag = false;
}
else printf(" * %d",i); // 其他质因子的输出格式
n /= i; // 剔除已经求得的质因子
--i; // 应对相同质因子
}
}
printf("\n1、继续,0、结束:");
scanf("%d",&an);
if(an == 0) break;
}
return 0;
}