約数を求める処理。(C#、Java、JavaScript、PHP、Python3、Ruby比較)

 標準入力からの整数nの全ての約数を求めて配列に格納する処理について、C#、Java、JavaScript、PHP、Python3、Rubyの6言語でコードを書きました。

 for文で繰り返しながら、整数nを1~n/2(端数切捨て)の整数iで割っていきます。整数nが整数iで割り切れる(余り0)であれば、整数iは整数nの約数となります。

 整数iが整数nの約数だった場合は、配列(リスト)に格納していきます。n/2(端数切捨て)まで繰り返し処理を済ませてfor文を抜けたら、整数n自身を配列(リスト)に格納することで、整数nの全ての約数が配列(リスト)に格納されたことになります。

 約数が入った配列(リスト)が返されたら、その配列(リスト)内容を出力します。

C#
using System;
using System.Collections.Generic;

public class Sample{
    //引数numの約数を求めて配列に入れるメソッド
    public static List<int> divisor(int num){
        var listBox = new List<int>();

        for (int i = 1; i <= (num / 2); i++){
            if (num % i == 0){
                listBox.Add(i);
            }
        }
        listBox.Add(num);
        return listBox;
    }

    //配列の全要素をカンマ区切りで出力するメソッド
    public static void listOutput(List<int> box){
        int idx = 0;

        foreach (int x in box){
            Console.Write(x);
            if (idx < box.Count-1){
                Console.Write(',');
            } else {
                Console.WriteLine();
            }
            idx += 1;
        }
    }

    public static void Main(){
        //標準入力された数値をメソッドに渡す
        int n = int.Parse(Console.ReadLine().Trim());
        listOutput(divisor(n));
    }
}

 引数として渡された整数の約数が入ったリストを返すdivisor(int num)メソッドと、リストの内容を取り出してカンマ区切りで出力するlistOutput(List box)メソッドをを定義。

 listOutput(List box)メソッドの引数にdivisor(int num)メソッドを入れることにより、標準入力された整数の約数の入ったリストの中身を出力します。

Java
import java.util.*;

public class Main {
    //引数numの約数を求めて配列に入れるメソッド
    public static List<Integer> divisor(int num){
        List<Integer> listBox = new ArrayList<>();

        for (int i = 1; i <= (num / 2); i++){
            if (num % i == 0){
                listBox.add(i);
            }
        }
        listBox.add(num);
        return listBox;
    }

    public static void main(String[] args) throws Exception {
        //標準入力された数値の約数を出力
        Scanner scan = new Scanner(System.in);
        var n = Integer.parseInt(scan.nextLine().trim());

        System.out.println(divisor(n));
    }
}

 C#と同様に、引数として渡された整数の約数が入ったリストを返すdivisor(int num)メソッドをを定義。

 標準入力された整数を引数としてdivisor(int num)に渡し、その整数の約数が格納されたリストが戻ってきたら、System.out.printlnでリストの内容を出力します。

JavaScript
process.stdin.resume();
process.stdin.setEncoding('utf8');

var lines = [];
var reader = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});
reader.on('line', (line) => {
  lines.push(line);
});
reader.on('close', () => {
    //引数numの約数を求めて配列に入れるメソッド
    function divisor(num){
        var arrBox = [];
        for (var i = 1; i <= parseInt(num / 2); i++){
            if (num % i === 0){
                arrBox.push(i);
            }
        }
        arrBox.push(num);
        return arrBox;
    }

    //標準入力された数値の約数を出力
    var n = parseInt(lines[0].trim());
    console.log(divisor(n));
});

 整数を引数として渡すと、その整数の約数が格納された配列を返すdivisor(num)メソッドを定義。

 divisor(num)で約数の入った配列が返されたら、console.logで配列の内容を出力します。

PHP
<?php
//引数numの約数を求めて配列に入れるメソッド
function divisor($num){
    $arrbox = [];

    for ($i = 1; $i <= ($num / 2); $i++){
        if ($num % $i == 0){
             array_push($arrbox,$i);
        }
    }
    array_push($arrbox,$num);
    return $arrbox;
}

//配列の全要素をカンマ区切りで出力するメソッド
function arroutput($arr){
    $ln = count($arr);
    $idx = 0;

    foreach ($arr as $x){
        echo $x;

        if ($idx < ($ln - 1)){
            echo ",";
        } else {
            echo "\n";
        }
        $idx += 1;
    }
}

//標準入力された数値の約数を出力
$n = trim(fgets(STDIN));
arroutput(divisor($n));
?>

 引数として渡された整数の約数が入った配列を返すdivisor($num)メソッドと、配列の内容を取り出してカンマ区切りで出力するarroutput($arr)メソッドをを定義。

 arroutput($arr)メソッドの引数にdivisor($num)メソッドを入れることにより、標準入力された整数の約数の入った配列の中身を出力します。

Python3
import math

#引数numの約数を求めて配列に入れるメソッド
def divisor(num):
    arrbox = []

    for i in range(1,math.floor(num / 2) + 1):
        if num % i == 0:
            arrbox.append(i)

    arrbox.append(num)
    return arrbox

#標準入力された数値の約数を出力
n = int(input().rstrip())
print (divisor(n))

 整数を引数として渡すと、その整数の約数が格納された配列を返すdivisor(num)メソッドを定義。それから、小数点以下を切り捨てる処理をする組み込みメソッドmath.floor()を使うために、import mathでモジュールを予め読み込んでおきます。

 divisor(num)で約数の入った配列が返されたら、printで内容を出力します。

Ruby
#引数numの約数を求めて配列に入れる
def divisor(num)
    arrbox = []

    for i in 1..(num/2)
        if num % i == 0
            arrbox.push(i)
        end
    end

    arrbox.push(num)
    return arrbox
end

#標準入力された数値の約数を出力
n = gets.chomp.to_i
p divisor(n)

 整数を引数として渡すと、その整数の約数が格納された配列を返すdivisor(num)メソッドを定義。

 divisor(num)で約数の入った配列が返されたら、pを使って配列の内容を出力します。

 この整数nの全ての約数を求めて配列に入れる処理を使うことで、整数nが素数かどうかの判定にも使えます。素数は1と整数n自身しか約数を持たないことから、整数nの全ての約数が格納された配列(リスト)の要素数が2であれば、整数nは素数と判定できます。

にほんブログ村 ゲームブログへ

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする