• 締切済み

C言語 因数分解

素因数分解する事が出来ません。また間違っている理由がわからないので何をどう直せば良いか理由を付けてご指摘お願いします。

この投稿のマルチメディアは削除されているためご覧いただけません。

みんなの回答

回答No.3

#include <stdio.h> #include <stdlib.h> #include <math.h> #include <string.h> #include <time.h> // Function to check if a number is prime int is_prime(int n) { if (n <= 1) return 0; if (n <= 3) return 1; if (n % 2 == 0 || n % 3 == 0) return 0; for (int i = 5; i * i <= n; i += 6) { if (n % i == 0 || n % (i + 2) == 0) return 0; } return 1; } // Function to factorize a number into its prime factors char* factorize(int n) { int size = 256; char* result = malloc(size); if (!result) return NULL; result[0] = '\0'; int prime = 2; int first = 1; while (n > 1) { while (n % prime == 0) { char buffer[20]; if (first) { sprintf(buffer, "%d", prime); first = 0; } else { sprintf(buffer, " * %d", prime); } if (strlen(result) + strlen(buffer) >= size) { size *= 2; result = realloc(result, size); if (!result) return NULL; } strcat(result, buffer); n /= prime; } do { prime++; } while (!is_prime(prime)); } return result; } int main(int argc, char *argv[]) { if (argc != 2) { printf("Usage: %s Natural number\n", argv[0]); return 1; } int n = atoi(argv[1]); if (n > 2) { printf("%d = ", n); clock_t start = clock(); char* factors = factorize(n); if (factors) { printf("%s\n", factors); free(factors); } clock_t end = clock(); double elapsed_time = (double)(end - start) / CLOCKS_PER_SEC; printf("Elapsed time = %fs\n", elapsed_time); } return 0; }

  • luka3
  • ベストアンサー率72% (424/583)
回答No.2

factorize関数の中で、primefactorization関数が定義されてて、C言語に見えてCじゃないのかなと不思議な感覚なのですが、 この primefactorization関数 がどこからも呼び出されていないですよね。 (primefactorization関数内から再帰的な呼び出しはありますが) factorize関数の最後で、primefactorization(n); で呼び出すとか? ちなみに、引数が 2 のとき、結果が「2 *」になりそうです。 それとunsigned long longとlong longが入り交じっているのも気になります。コンパイル時にワーニングとか出ないですか?

  • f272
  • ベストアンサー率46% (8467/18126)
回答No.1

https://okwave.jp/qa/q10223092.html これの#2で指摘があったことを理解して書き直してください。

専門家に質問してみよう