標準入力からの整数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は素数と判定できます。