我正在编写一个程序,计算输入的数字的质数。我创建了一个查找素数的程序,但是我想编写与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 Primeunsigned(231-1)时,我使用了2147483647算法来避免溢出。
如果类型main的位数少于32位,则int函数中可能存在未定义的行为。
通过将x++更改为x += 1 + (x & 1)以跳过大于2的偶数,可以进行两倍的扫描。

关于c - 以力量作为C中2 ^ 2的写法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42460517/

10-11 12:22