• 締切済み

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
  • ベストアンサー率74% (300/403)
回答No.2

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

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

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

関連するQ&A

  • C言語

    これで入れた数字を素因数分解する事が出来ません。また間違っている理由がわからないのでご指摘お願いします。

  • 因数分解の文章題です。

    何度してもしっくりきません。 (1)252に自然数aをかけて、その結果の数がある数の2乗になるようにしたい。このような自然数aのうちで、もっとも小さいものを求めよ。 (問題の意味さえピンときません・・・・) 252を素因数分解すると 2^2×3^2×7 答えでは2乗でないものを選ぶと7 答え7 (2)300に自然数aをかけて、その結果の数がある数の2乗になるようにしたい。このような自然数aのうちで、もっとも小さいものを求めよ。 300を素因数分解すると 3×2^2×5^2 答え3 (類題)素因数分解の結果が2×3×4^2の場合 (類題)素因数分解の結果が2^2×3^2の場合はこたえはどのようになるのでしょうか?またその理由もお願いします。

  • 因数分解

    x^2-x+1の素因数分解はどうすればいいのでしょうか。 よろしくお願いします!

  • 算数の因数分解技法

    1363を素因数分解しろ、という問題を小学生が簡単に 解くテクニックはあるでしょうか? 29*47が答え ですが、地道に試すしかありませんか?

  • c言語 至急お願い致します

    10000以下の自然数のうち素因数分解を行ったときにその因子の数が最多となる数を求め,その数,因子の数,素因数分解の結果を表示するプログラムを作成して下さい. 出力形 8192 = 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 因子数:13

  • 素数の素因数分解

    素数(例えば17)の素因数分解について  (1)すでに素因数分解は終わっている (17の素因数分解は17)  (2)素因数分解はできない のどちらの見解が正しいですか?

  • 素因数分解について

    X=√4,840,000 を素因数分解?? で解く場合、100*2*11=2,200 となると思いますが、素数の100を1000にしては駄目ですか? そもそも、素因数分解のルールが理解出来ていません。 素因数分解の簡単なやり方を分かり易く教えて下さる方、宜しくお願いいたします。 因数分解は方程式なので、取っ付きにくいイメージがあります。

  • 素因数分解について

    中学三年で習う素因数分解についてです。 素因数分解をするときに、数字を最小の素数で割らなければいけない理由は何ですか? また、素因数分解を利用して最大公約数と最小公倍数を求めるための式(共通の素数をかけていくという式です)の意味が理解できません。。 何故あの式で最小公倍数と最大公約数が出るんでしょうか? テストが近いのでかなり焦っています。 どなたか詳しく説明してくださる方、回答よろしくお願いします。

  • 素因数分解ができない?

    123、205の最大公約数はいくつでしょう? 素因数分解をして求めたいのですが、 123は3で割って41 3* 205は5で割って41 5* となるのでしょうか? その後の素因数分解が続きません。 すいませんが、教えてください。 よろしくお願いします。

  • 1を素因数分解しなさい

    数学的には例外(素因数分解できない)は作りたくないのですが…。 でも、「1」の素因数分解と言われたら、答はどうなるのでしょう。

専門家に質問してみよう