以C 2 ^ 2的写法取电

时间:2017-02-25 19:18:38

标签: c loops

我正在编写一个程序,用于计算输入数字的素数。我创建了一个找到素数的程序,但我想写出与幂相同的值。

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 个答案:

答案 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的数字,可以使扫描速度提高两倍。