我正在编写一个程序,用于计算输入数字的素数。我创建了一个找到素数的程序,但我想写出与幂相同的值。
if (num < 0)
printf("THIS VALUE IS NOT AVAILABLE TO FIND THE PRIMES");
else {
x = 2;
while (num != 0) {
if (num % x != 0)
x = x + 1;
else {
num = num / x;
printf("%d", x);
if (num == 1)
break;
在这里例如当我输入9时它给出3 3并且我想将其视为3 ^ 2。如果你回答,我将不胜感激。
答案 0 :(得分:1)
您应该计算可以除以给定主要候选者的次数,并在计数大于1时打印指数形式。 以下是它的工作原理:
#include <stdio.h>
void factor(int num) {
unsigned int n, x, count;
int sep = '=';
if (num < 0) {
printf("Cannot handle negative number %d\n", num);
return;
}
printf("%d", num);
for (n = num, x = 2; x * x <= n; x++) {
for (count = 0; n % x == 0; count++) {
n /= x;
}
if (count >= 1) {
printf(" %c %u", sep, x);
sep = '*';
if (count > 1) {
printf("^%u", count);
}
}
}
if (n > 1 || n == num) {
printf(" %c %u", sep, n);
}
printf("\n");
}
int main(void) {
for (int i = 0; i < 100; i++) {
factor(i);
}
for (int i = 0; i < 32; i++) {
factor((1U << i) - 1);
}
return 0;
}
注意:
unsigned
算术来避免在尝试2147483647
(2 31 -1)时出现溢出,这恰好是Mersenne Prime。main
少于32位,int
函数中存在潜在的未定义行为。x++
更改为x += 1 + (x & 1)
以跳过偶数大于2的数字,可以使扫描速度提高两倍。