我正在编写一个程序,计算输入的数字的质数。我创建了一个查找素数的程序,但是我想编写与power相同的值。
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。如果您回答我将不胜感激。
最佳答案
您应该只计算可以除以给定的主要候选数的次数,如果计数大于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;
}
笔记:
在尝试分解恰好是Mersenne Prime的
unsigned
(231-1)时,我使用了2147483647
算法来避免溢出。如果类型
main
的位数少于32位,则int
函数中可能存在未定义的行为。通过将
x++
更改为x += 1 + (x & 1)
以跳过大于2的偶数,可以进行两倍的扫描。关于c - 以力量作为C中2 ^ 2的写法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42460517/