[ create a new paste ] login | about

Link: http://codepad.org/68Zt5NaH    [ raw code | fork ]

C, pasted on May 5:
#include <stdio.h>
#include <stdlib.h> /* exit() */


/* 素因数分解 */
void factrize(int x){
    int d, q;
    
    printf("%8d = ", x );
    /* 2で割れるだけ割る */
    while(x >= 4 && x % 2 == 0){
        printf("2 * ");
        x /= 2;
    }
    /* 順番に3以上の奇数で割れるだけ割る */
    d = 3;
    while(q = x/ d, q >= d ){
        if (x % d == 0){            /* 割り切れたら */
            printf("%d * ", d);     /* その数を表示に追加 */
            x = q;
        }else{          /* 割り切れなかったら */
            d += 2;     /* 次の奇数へ */
        }
    }
    printf("%d\n", x);
}


/* 入力値のチェック */
void chk_val(int *v1, int *v2){
    int tmp;
    
    /* どちらかが0か0以下なら計算中止 */
    if((*v1 <= 0)||(*v2 <= 0)){
        printf("不正な値が入力されました。終了します\n");
        exit(1);      /* プログラム終了 */
    }
    /* どちらかが32768以上なら計算中止 */
    if((*v1 >= 32768)||(*v2 >= 32768)){
        printf("入力値が大きすぎます。終了します\n");
        exit(1);      /* プログラム終了 */
    }
    /* v2 > v1 なら値を入換え */
    if(*v2 > *v1){
        tmp = *v2;
        *v2 = *v1;
        *v1 = tmp;
    }
    /* printf("v1:%d, v2:%d\n", *v1, *v2); */
}

/* 最大公約数 */
int gcd(int a,int b){
    int c;

    while(c = a % b, c > 0){
        /* printf("c:%d\n", c); */
        a = b % c;
        b = c;
    }
    return b;
}


/* 最小公倍数 */
int lcm(int a,int b){
    int c, d;

    c = gcd(a, b);
    /* ret_val = (a * b) / c; */
    d = (a / c) * b;
    return d;
}


/* メインプログラム */
int main(void) {
    int kone,ktwo;
    int aone;
    int atwo;

    printf("1つ目の値を入力して下さい:");
    scanf("%d", &kone);
    printf("2つ目の値を入力して下さい:");
    scanf("%d",&ktwo);
    
    chk_val(&kone, &ktwo);

    printf("素因数分解:\n");
    factrize(kone);
    factrize(ktwo);
    
    aone = gcd(kone,ktwo);
    atwo = lcm(kone,ktwo);

    printf("最大公約数は、%dです。\n最小公倍数は、%ldです。\n", aone, atwo);
    return 0;
}


Create a new paste based on this one


Comments: