• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:素因数プログラムで、間違えて因数4で割らない)

素因数プログラムで因数4を間違えて割らなかった理由

hi_kurokunの回答

回答No.2

n=20を考えると(20=5*4) 以下のように動きます 1.3)でX=2 2.4)でn%x は20%2で割り切れる5)以下の処理 3.5)で2を表示 4.6)n=n/x つまり n=20/2=10 5.4)でn%x は10%2で割り切れる5)以下の処理 6.5)で2を表示 7.6)n=n/x つまり n=10/2=5 8.4)でn%x は5%2で割り切れないので3)へいく 9.3)でX=3 : このように動きます つまり4)、6)の処理で入力値nを2であまりが出るまで 割り続けています。 x=4(=2*2)にいくまでに、 4で割れる条件が処理されています(2で割る処理を行っています)

関連するQ&A

  • 素因数分解プログラムで、5は5と表示するのは?

     練習問題 5-15  2以上の数値を入力し、素因数分解した結果を表示しなさい。 1) int n, x; 2) scanf("%d", &n ); 3) for( x = 2 ; n > 1 ; x++ ){ /*for解説コメントをお願いします。*/ 4) while( ( n % x ) == 0 ){ 5) printf( "%d ", x ); 6) n /= x; } }  以上のプログラムですが、100と入力すると→2 2 5 5と表示されます。  5と入力すると→5と表示されます。どこのプログラムで5は5しか割り切れないと  判断しているのでしょうか?  宜しくお願いします。

  • プログラムの解説をお願いします。

    2以上の数値を入力し、素因数分解した結果を表示しなさい。 1) int n, x; 2) scanf("%d", &n ); 3) for( x = 2 ; n > 1 ; x++ ){ /*for解説コメントをお願いします。*/ 4) while( ( n % x ) == 0 ){ 5) printf( "%d ", x ); 6) n /= x; } }  全て解説を頼むと考えなくなるため、3) の解説をお願いします。

  • 素因数分解のプログラムを作成しました。

    素因数分解のプログラムを作成しました。 なぜか11桁を超えた場合、正しく表示されません!! アドバイス等お願いします。 あと、処理時間も組んでみましたがこちらもうまくいきません。 改善をお願いしますm(_ _)m #include<stdio.h> #include<time.h> void fanction(int); void main(void) { int n; clock_t start_time, end_time; printf("整数を入力してください。\n"); scanf("%d",&n); start_time = clock(); fanction(n); end_time = clock(); printf("\n\n処理時間:%.3f秒\n",(double)(end_time - start_time) / CLOCKS_PER_SEC); return 0; } void fanction(int n) { int m; char c='='; for(m=2;n != 1;m++) { while(n%m == 0) { n = n/m; printf("%c%d",c,m); c='*'; } } }

  • プログラムの勉強でわからないところがあります

    明解C言語の入門編、演習4-3 二つの整数値を読み込んで、小さい方の数以上で大きい方の数以下の整数を全て加えた値を表示するプログラムを作成するものなのですが、うまくいかなく困っています。 他の書き方でやれば普通にいけると思うのですが、どうしてこれだとできないのかがわからないとすっきりしなくって・・・ 以下のようなプログラムで試しています。 #include <stdio.h> int main(void) { int n1,n2,n3,n4; puts("二つの整数を入力してください"); printf("整数1:"); scanf("%d",&n1); printf("整数2:"); scanf("%d",&n2); n3=(n1>n2) ? n2 : n1; n4=(n1>n2) ? n1 : n2; printf("%d以上%d以下の全整数の和は", n3,n4); int num=n1; int sub=n2; int wa; printf("num=%d sub=%dで",num,sub); do{ if (n1>n2) { wa=num+sub; /* 大きいほうの数(num)にsub(小さい方の数+0,2,3,4・・・)を足していく */ sub=sub+1;/* ここを通るたびにsubに+1 */ printf("%d",wa);} else { wa=sub+num; num=num+1; printf("%d",wa);} }while(sub!=n1 || num !=n2); /* 小さい方の数に1足していったものが大きい方の数と等しくなったら0を生成し終了 */ printf ("です\n"); return 0; } このプログラムで試すと、延々と計算をし続けていってしまうのです。 whileあたりがおかしいのかと思ったのですが、どこがおかしいのかわからなくって・・ whileは、中の数字が0を生成する場合止まる、というものだったと思うので、小さい方の数字に1ずつ足していって、大きい方の数字と等しくならない限り続けるように作ったつもりなのですが・・・ どこがおかしいのか教えて頂けると嬉しいです。 それとワガママなお願いなのですが、できれば、正答のようなものは書かないでもらえると助かります、どこが間違いなのかだけ教えて頂いて、後はなんとか自分の力でこなしてみたいので・・・ 自分勝手なお願いですが、よろしくお願いします。

  • 素数を判定するプログラム

    整数をひとつ入力して、それが素数かどうかを判定するプログラムを作ったのですが、素数でないものを入力しても「素数です」といわれます。 どうもfor文が評価されていないような気がしますが、原因がわかりません。 // homework4.cpp : コンソール アプリケーションのエントリ ポイントを定義します。 #include <stdio.h> int main(int argc, char* argv[]) { int number; int n = 2; int i; printf("1より大きい整数を入力してください: "); scanf("%d",&number); while (number <= 1) { printf("1より大きい整数を入力してください: "); scanf("%d",&number); } if (number == 2) { printf("%dは素数です\n",number); goto OUT; } else { for (; n == number - 1; n++) { i = number % n; if (i == 0) printf("%dは素数ではありません\n", number); if (i == 0) goto OUT; } } printf("%dは素数です\n", number); OUT: return 0; } どうかよろしくお願いします。

  • 素数プログラムの解読、

    C言語のプログラムで素数を求めるプログラムで、 //入力された数字が素数がどうかを求めるプログラムです。 #include<stdio.h> main() { int a,c; //aはそれが素数かどうか調べたい数字です。 printf("aに何か好きな整数をいれてください。\n"); printf("a="); scanf("%d",&a); c = 2; while ( a%c ){ c += c%2+1; printf("途中計算 %d\n",c); } if ( a > 1 && c == a ){ printf("素数です。\n"); }else{ printf("素数ちゃうよ。\n"); } } というのを作りました。このプログラムは 教えてgooの回答欄にあったものを自分で いじったものですが、 c = 2; while ( a%c ){ c += c%2+1; printf("途中計算 %d\n",c); } の部分が何をしているのかが、わかりません。 printf("途中計算 %d\n",c); は 何をしているかが解るかもしれないと思い 自分で付足しましたが、やっぱりわかりません。 だれか解る方お願いします。

  • 素数を判定するプログラム

    素数を判定するプログラムをC言語で作れという問題があったのですが、以下のものをビルドして実行したら途中で止まってしまいました。(例えば5と入力する)しかし、1以下の場合は正常にif文が評価されました。 // homework4.cpp : コンソール アプリケーションのエントリ ポイントを定義します。 #include <stdio.h> int main(int argc, char* argv[]) { int number; int n; int i; printf("1より大きい整数を入力してください: "); scanf("%d", &number); if (number <= 1) { printf("1より大きい整数を入力してください\a: "); scanf("%d", &number); } for (n = 2; n = number - 1; n++) { i = number % n; if (i = 0) { printf("%dは素数ではありません", number); break; } } printf("%dは素数です", number); return 0; } 自分ではどこがおかしいのかさっぱりわかりません。よろしくお願いします。

  • 因数分解プログラム(C言語)について(1)

    ”因数分解を行うプログラムについて”の質問と同じ者です。 みなさんのご回答を参考にして、作ってみたのですが、 ポインタとかの使い方などがわからず、実行すると、 不正な処理を行ったので終了しますとなってしまいます。 どなたか、具体的にどこが悪いのか、 そしてどのように直せば正しく実行されるのか、 教えて下さい。お願いします。 以下↓がプログラムです。 800文字以上のため二つに分割しました。 #include <stdio.h> #include <math.h> #include <process.h> /*関数プロトタイプ宣言*/ int input(int *,int *,int *); int judge(int *,int *,int *); int bunkai1(int *,int *,int *,int *,int *,float *); int bunkai2(int *,int *,int *,int *,int *,float *); int yakubun1(int *,int *,int *,int *,int *,int *,int *); int yakubun2(int *,int *,int *,int *,int *,int *,int *); int output(int *,int *,int *,int *); /*関数の呼び出し*/ int main(void) { int a,b,c,q,n1,m1,min1,flag,i,d,e,m2,n2,min2,f,g; float D; input(&a,&b,&c); judge(&a,&b,&c); bunkai1(&a,&b,&q,&n1,&m1,&D); bunkai2(&a,&b,&q,&n2,&m2,&D); yakubun1(&m1,&n1,&min1,&flag,&i,&d,&e); yakubun2(&m2,&n2,&min2,&flag,&i,&f,&g); output(&d,&e,&f,&g); return (0); } /*数値入力関数*/ int input(int *a,int *b,int *c) { printf("a*x^2+b*x+c=0で,a,b,cを入力して下さい。\n"); printf("a="); scanf("%d",a); printf("b="); scanf("%d",b); printf("c="); scanf("%d",c); if(*a == 0){ printf("a = 0なので因数分解できません。\n"); exit(1); } return 0; } つづく

  • 10進数から2進数へ・・・

    10進数から2進数に変換するプログラムを作っています。a[i]=(x/2)%2という式をforでまわせば、できると思うんですが、a[i]の配列をどうやって表示させるのかわかりません、 main以下をのせときます。 int x; int i; float a[i]; printf("10進数を入力してください>"); scanf("%d",&x); a[i]=(x/2)%2; printf("2進数は%d\n",a[i]); }

  • プログラムがエラーが出る原因

    以下のプログラムがエラーが出る原因を教えてください。 2以上の数値を入力し、素因数分解した結果を表示するプログラム。 #include <stdio.h> int main() { int n, x; scanf("%d", &n );/* for( x = 2 ; n > 1 ; x++ ){ while( ( n % x ) == 0 ){ printf( "%d ", x ); n /= x; } } return 0; } エラー表示 $ gcc s.c -o s.exe s.c:6:18: unterminated comment s.c: In function `main': s.c:6: error: syntax error at end of input 環境 1) テキストエディタ→秀丸   秀丸のファイル保存方法  ・ファイル名→C言語ソースファイル(*c) ・エンコードの種類→自動判定ー日本語(Shift-Jis) ・改行コード→自動(変更なし) 2) コンパイルソフト →MinGW 3) シェル→MSYS