优化这段代码#include <stdio.h>#include <stdbool.h>bool prime(int n) { if (n <= 1) { return false; } for (int i = 2; i * i <= n; i++) { if (n % i == 0) { return false; } } return true;}void prime_factors(int n) { printf("%d的素数因子为:", n); for (int i = 2; i <= n; i++) { if (n % i == 0) { if (prime(i)) { printf("%d ", i); n /= i; i--; } } }}int main() { int n; printf("请输入一个整数:"); scanf("%d", &n); prime_factors(n); return 0;}
时间: 2024-03-11 14:49:00 浏览: 69
好的,以下是一个优化过的C语言程序,可以输出一个整数的全部素数因子:
```c
#include <stdio.h>
#include <stdbool.h>
bool prime(int n) {
if (n <= 1) {
return false;
}
if (n == 2 || n == 3) {
return true;
}
if (n % 6 != 1 && n % 6 != 5) {
return false;
}
for (int i = 5; i * i <= n; i += 6) {
if (n % i == 0 || n % (i + 2) == 0) {
return false;
}
}
return true;
}
void prime_factors(int n) {
printf("%d的素数因子为:", n);
if (n < 2) {
return;
}
while (n % 2 == 0) {
printf("2 ");
n /= 2;
}
while (n % 3 == 0) {
printf("3 ");
n /= 3;
}
for (int i = 5; i * i <= n; i += 6) {
while (n % i == 0) {
if (prime(i)) {
printf("%d ", i);
n /= i;
}
else {
break;
}
}
while (n % (i + 2) == 0) {
if (prime(i + 2)) {
printf("%d ", i + 2);
n /= (i + 2);
}
else {
break;
}
}
}
if (n > 3 && prime(n)) {
printf("%d", n);
}
}
int main() {
int n;
printf("请输入一个整数:");
scanf("%d", &n);
prime_factors(n);
return 0;
}
```
这个程序对原始的素数判断函数进行了优化,采用了更快速的判断素数的方法,同时也对主函数中的素数因子分解算法进行了修改和优化。这个程序可以更快地输出一个整数的全部素数因子。
阅读全文