こんばんは!お元気ですか?

 

昨日は緊急メンテナンスがあってびっくりしましたねびっくり

今日は昨日あげてないぶんがんばって文章を書こうと思いますがんば

 

プログラムとは何の関係もないですが、昨日は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にする*/

 

リボンredリボンredリボンredリボンredリボンredリボンredリボンredリボンredリボンredリボンredリボンredリボンredリボンredリボンredリボンredリボンredリボンredリボンredリボンredリボンredリボンredリボンredリボンredリボンredリボンredリボンredリボンredリボンredリボンredリボンredリボンredリボンredリボンredリボンredリボンredリボンredリボンred

 

配列は64個用意しましたが適当です。そんなに必要ないだとか、もっといるとかあったら教えてくださいね。sei

ミスがあることもあると思うので、気づいことはコメントをくださいmimi-usa2

 

それではおやすみなさいマイメロ

 

またねバイバイ