こんばんは!お元気ですか?
昨日は緊急メンテナンスがあってびっくりしましたね![]()
今日は昨日あげてないぶんがんばって文章を書こうと思います![]()
プログラムとは何の関係もないですが、昨日はYouTubeを見ていて、モーニング娘。'17の新曲がとってもかっこいいと思いました![]()
もう一曲のMVも早く見たいですね。モーニングみそ汁
の販売も楽しみです![]()
さて、今回は素因数分解をするプログラムを考えました![]()
値を2から1ずつ増加させて、入力された値の約数を調べます。
続いて求められた約数の約数を調べ、素数が導かれるまでこの処理を繰り返します。
こうすることで素因数分解が行えます。
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
ソースコード ![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
#include <stdio.h>
#define N 64
void prime_factor(long int y, long int pf[N]);/*素因数分解を行う関数*/
int main(void){
long int a, result[N];
int i;
printf("整数を入力してください>>>");
scanf("%d", &a);
prime_factor( a, result ); /*入力された値の素因数を求める*/
printf("素因数\n");
for( i = 0; result[i] ; i++){
/*配列の最後が0なのでその前の値まで表示する*/
printf("%d\n", result[i]);
}
return 0;
}
/*素因数分解を行う関数*/
void prime_factor(long int y, long int pf[N]){
long int x[N];
int b = 1, i, j = 0 , k;
x[0] = y;
/*全ての約数が素数でないとき以下の処理を繰り返す*/
for( k = 0; b ; k++, j++ ){
b = 0;
/*iの値を増やして1以外の最小の約数を調べる*/
for( i = 2; i < x[j]/2 ; i++ ){
/*x[j]がiで割り切れるとき*/
if( !(x[j] % i) ){
x[j+1] = x[j]/i;
x[j] = i;
b = 1; /*素数でなかった場合は1になる*/
}
}
pf[k] = x[j];
pf[k+1] = x[j+1];
}
pf[k] = 0; /*配列の最後の数は0にする*/
}
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
配列は64個用意しましたが適当です。そんなに必要ないだとか、もっといるとかあったら教えてくださいね。![]()
ミスがあることもあると思うので、気づいことはコメントをください![]()
それではおやすみなさい![]()
![]()
![]()