0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

paizaラーニングレベルアップ問題集の「二重ループメニュー」をやってみた。(4)

Posted at

paizaラーニングレベルアップ問題集の「二重ループメニュー」をやってみました。


問題
行列の転置

かけ算表

素数の個数

log2



方針
素数の個数

エラトステネスのふるいを使う方法もありますが、今回は「二重ループ」メニューなので、二重ループ($O(N^2)$解法)で解きます。
※制約条件が$N\le 10000$の場合は、$O(N\sqrt N)$解法でないとタイムオーバーになります。

log2

階乗の末尾に0はいくつ付く?の解き方($O(\log N)$解法)もありますが、今回は「二重ループ」メニューなので、二重ループ($O(N\log N)$解法)で解きます。


C
行列の転置
#include <stdio.h>

int main() {
	int n, k;
	scanf("%d %d", &n, &k);
	int A[n][k];
	for (int i = 0; i < n; i++)
		for (int j = 0; j < k; j++)
			scanf("%d", &A[i][j]);
	for (int i = 0; i < k; i++) {
		for (int j = 0; j < n; j++) {
			if (j) putchar(' ');
			printf("%d", A[j][i]);
		}
		puts("");
	}
	return 0;
}
かけ算表
#include <stdio.h>

int main() {
	int n;
	scanf("%d", &n);
	int A[n];
	for (int i = 0; i < n; i++) scanf("%d", &A[i]);
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			if (j) putchar(' ');
			printf("%d", A[i] * A[j]);
		}
		puts("");
	}
	return 0;
}
素数の個数
#include <stdio.h>

int main() {
	int n;
	scanf("%d", &n);
	int cnt = 0;
	for (int k = 2; k <= n; k++) {
		for (int i = 2; i <= k; i++) {
			if (i == k) cnt++;
			else if (k % i == 0) break;
		}
	}
	printf("%d\n", cnt);
	return 0;
}
log2
#include <stdio.h>

int main() {
	int n;
	scanf("%d", &n);
	int cnt = 0;
	for (int k = 1; k <= n; k++) 
		for (int i = 2; k % i == 0; i *= 2)
			cnt++;
	printf("%d\n", cnt);
	return 0;
}

C++
行列の転置
#include <iostream>
using namespace std;

int main() {
	int n, k;
	cin >> n >> k;
	int A[n][k];
	for (int i = 0; i < n; i++)
		for (int j = 0; j < k; j++)
			cin >> A[i][j];
	for (int i = 0; i < k; i++) {
		for (int j = 0; j < n; j++) {
			if (j) cout << ' ';
			cout << A[j][i];
		}
		cout << endl;
	}
	return 0;
}
かけ算表
#include <iostream>
using namespace std;

int main() {
	int n;
	cin >> n;
	int A[n];
	for (int i = 0; i < n; i++) cin >> A[i];
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			if (j) cout << ' ';
			cout << A[i] * A[j];
		}
		cout << endl;
	}
	return 0;
}
素数の個数
#include <iostream>
using namespace std;

int main() {
	int n;
	cin >> n;
	int cnt = 0;
	for (int k = 2; k <= n; k++)
		for (int i = 2; i <= k; i++)
			if (i == k) cnt++;
			else if (k % i == 0) break;
	cout << cnt << endl;
	return 0;
}
log2
#include <iostream>
using namespace std;

int main() {
	int n;
	cin >> n;
	int cnt = 0;
	for (int k = 1; k <= n; k++)
		for (int i = 2; k % i == 0; i *= 2)
			cnt++
	cout << cnt << endl;
	return 0;
}

C#
行列の転置
using System;

class Program
{
	public static void Main()
	{
		int[] nk = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
		int n = nk[0], k = nk[1];
		int[][] A = new int[n][];
		for (int i = 0; i < n; i++) A[i] = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
		for (int i = 0; i < k; i++) {
			for (int j = 0; j < n; j++) {
				if (j > 0) Console.Write(' ');
				Console.Write(A[j][i]);
			}
			Console.WriteLine();
		}
	}
}
かけ算表
using System;

class Program
{
	public static void Main()
	{
		int n = int.Parse(Console.ReadLine());
		int[] A = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				if (j > 0) Console.Write(' ');
				Console.Write(A[i] * A[j]);
			}
			Console.WriteLine();
		}
	}
}
素数の個数
using System;

class Program
{
	public static void Main()
	{
		int n = int.Parse(Console.ReadLine());
		int cnt = 0;
		for (int k = 2; k <= n; k++)
			for (int i = 2; i <= k; i++)
				if (i == k) cnt++;
				else if (k % i == 0) break;
		Console.WriteLine(cnt);
	}
}
log2
using System;

class Program
{
	public static void Main()
	{
		int n = int.Parse(Console.ReadLine());
		int cnt = 0;
		for (int k = 2; k <= n; k++)
			for (int i = 2; k % i == 0; i *= 2)
				cnt++;
		Console.WriteLine(cnt);
	}
}

Go
行列の転置
package main
import "fmt"

func main() {
	var n, k int
	fmt.Scan(&n, &k)
	A := make([][]int, n)
	for i := 0; i < n; i++ {
		A[i] = make([]int, k)
		for j := 0; j < k; j++ {
			fmt.Scan(&A[i][j])
		}
	}
	for i := 0; i < k; i++ {
		for j := 0; j < n; j++ {
			if j > 0 {
				fmt.Print(" ")
			}
			fmt.Print(A[j][i])
		}
		fmt.Println()
	}
}
かけ算表
package main
import "fmt"

func main() {
	var n int
	fmt.Scan(&n)
	A := make([]int, n)
	for i := 0; i < n; i++ {
		fmt.Scan(&A[i])
	}
	for i := 0; i < n; i++ {
		for j := 0; j < n; j++ {
			if j > 0 {
				fmt.Print(" ")
			}
			fmt.Print(A[i] * A[j])
		}
		fmt.Println()
	}
}
素数の個数
package main
import "fmt"

func main() {
	var n int
	fmt.Scan(&n)
	cnt := 0
	for k := 2; k <= n; k++ {
		for i := 2; i <= k; i++ {
			if i == k {
				cnt += 1
			} else if k % i == 0 {
				break
			}
		}
	}
	fmt.Println(cnt)
}
log2
package main
import "fmt"

func main() {
	var n int
	fmt.Scan(&n)
	cnt := 0
	for k := 1; k <= n; k++ {
		for i := 2; k % i == 0; i *= 2 {
			cnt += 1
		}
	}
	fmt.Println(cnt)
}

Java
行列の転置
import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int k = sc.nextInt();
		sc.nextLine();
		int[][] A = new int[n][];
		for (int i = 0; i < n; i++)
			A[i] = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
		sc.close();
		for (int i = 0; i < k; i++) {
			for (int j = 0; j < n; j++) {
				if (j > 0) System.out.print(' ');
				System.out.print(A[j][i]);
			}
			System.out.println();
		}
	}
}
かけ算表
import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		sc.nextLine();
		int[] A = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
		sc.close();
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				if (j > 0) System.out.print(' ');
				System.out.print(A[i] * A[j]);
			}
			System.out.println();
		}
	}
}
素数の個数
import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		sc.close();
		int cnt = 0;
		for (int k = 2; k <= n; k++)
			for (int i = 2; i <= k; i++)
				if (i == k) cnt++;
				else if (k % i == 0) break;
		System.out.println(cnt);

	}
}
log2
import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		sc.close();
		int cnt = 0;
		for (int k = 1; k <= n; k++)
			for (int i = 2; k % i == 0; i *= 2)
				cnt++;
		System.out.println(cnt);
	}
}

JavaScript
行列の転置
const [[n, k], ...A] = require("fs").readFileSync("/dev/stdin", "utf8").trim().split('\n').map(s => s.split(' ').map(Number));
for (var i = 0; i < k; i++) {
	let s = "";
	for (var j = 0; j < n; j++) {
		if (j) s += ' ';
		s += A[j][i];
	}
	console.log(s);
}
かけ算表
const [[n], A] = require("fs").readFileSync("/dev/stdin", "utf8").trim().split('\n').map(s => s.split(' ').map(Number));
for (var i = 0; i < n; i++) {
	let s = "";
	for (var j = 0; j < n; j++) {
		if (j) s += ' ';
		s += A[i] * A[j];
	}
	console.log(s);
}
素数の個数
const n = Number(require("fs").readFileSync("/dev/stdin", "utf8"));
let cnt = 0;
for (var k = 2; k <= n; k++)
	for (var i = 2; i <= k; i++)
		if (i == k) cnt++;
		else if (k % i == 0) break;
console.log(cnt);
log2
const n = Number(require("fs").readFileSync("/dev/stdin", "utf8"));
let cnt = 0;
for (var k = 1; k <= n; k++)
	for (var i = 2; k % i == 0; i *= 2)
		cnt++;
console.log(cnt);

Kotlin
行列の転置
fun main() {
	val (n, k) = readLine()!!.split(' ').map { it.toInt() }
	val A = Array(n) { readLine()!!.split(' ').map { it.toInt() } }
	for (i in 0 until k) {
		for (j in 0 until n) {
			if (j > 0) print(' ')
			print(A[j][i])
		}
		println()
	}
}
かけ算表
fun main() {
	val n = readLine()!!.toInt()
	val A = readLine()!!.split(' ').map { it.toInt() }
	for (i in 0 until n) {
		for (j in 0 until n) {
			if (j > 0) print(' ')
			print(A[i] * A[j])
		}
		println()
	}
}
素数の個数
fun main() {
	val n = readLine()!!.toInt()
	var cnt = 0
	for (k in 2..n)
		for (i in 2..k)
			if (i == k) cnt += 1
			else if (k % i == 0) break
	println(cnt)
}
log2
fun main() {
	val n = readLine()!!.toInt()
	var cnt = 0
	for (k in 1..n) {
		var i = 2
		while (k % i == 0) {
			cnt += 1
			i *= 2
		}
	}
	println(cnt)
}

PHP
行列の転置
<?php
	[$n, $k] = array_map("intval", explode(' ', fgets(STDIN)));
	$A = [];
	for ($i = 0; $i < $n; $i++) $A[] = array_map("intval", explode(' ', fgets(STDIN)));
	for ($i = 0; $i < $k; $i++) {
		for ($j = 0; $j < $n; $j++) {
			if ($j) echo ' ';
			echo $A[$j][$i];
		}
		echo PHP_EOL;
	}
?>
かけ算表
<?php
	$n = intval(fgets(STDIN));
	$A = array_map("intval", explode(' ', fgets(STDIN)));
	for ($i = 0; $i < $n; $i++) {
		for ($j = 0; $j < $n; $j++) {
			if ($j) echo ' ';
			echo $A[$i] * $A[$j];
		}
		echo PHP_EOL;
	}
?>
素数の個数
<?php
	$n = intval(fgets(STDIN));
	$cnt = 0;
	for ($k = 2; $k <= $n; $k++)
		for ($i = 2; $i <= $k; $i++)
			if ($i == $k) $cnt++;
			else if ($k % $i == 0) break;
	echo $cnt, PHP_EOL;
?>
log2
<?php
	$n = intval(fgets(STDIN));
	$cnt = 0;
	for ($k = 2; $k <= $n; $k++)
		for ($i = 2; $k % $i == 0; $i *= 2)
			$cnt++;
	echo $cnt, PHP_EOL;
?>

Perl
行列の転置
my ($n, $k) = map { int($_) } split ' ', <STDIN>;
my @A;
for (1..$n) {
	push @A, [map { int($_) } split ' ', <STDIN>];
}
for (my $i = 0; $i < $k; $i++) {
	for (my $j = 0; $j < $n; $j++) {
		if ($j) {
			print ' ';
		}
		print $A[$j][$i];
	}
	print $/;
}
かけ算表
my $n = int(<STDIN>);
my @A = map { int($_) } split ' ', <STDIN>;
for (my $i = 0; $i < $n; $i++) {
	for (my $j = 0; $j < $n; $j++) {
		if ($j) {
			print ' ';
		}
		print $A[$i] * $A[$j];
	}
	print $/;
}
素数の個数
my $n = int(<STDIN>);
my $cnt = 0;
for (my $k = 2; $k <= $n; $k++) {
	for (my $i = 2; $i <= $k; $i++) {
		if ($i == $k) {
			$cnt++;
		} else {
			last if $k % $i == 0;
		}
	}
}
print "$cnt$/";
log2
my $n = int(<STDIN>);
my $cnt = 0;
for (my $k = 1; $k <= $n; $k++) {
	for (my $i = 2; $k % $i == 0; $i *= 2) {
		$cnt++;
	}
}
print "$cnt$/";

Python3
行列の転置
n, k = map(int, input().split())
A = [list(map(int, input().split())) for _ in range(n)]
for i in range(k):
	T = []
	for j in range(n):
		T.append(A[j][i])
	print(*T)
かけ算表
n = int(input())
A = list(map(int, input().split()))
for i in range(n):
	P = []
	for j in range(n):
		P.append(A[i] * A[j])
	print(*P)
素数の個数
n = int(input())
cnt = 0
for k in range(2, n + 1):
	for i in range(2, k):
		if k % i == 0:
			break
	else:
		cnt += 1
print(cnt)
log2
n = int(input())
cnt = 0
for k in range(1, n + 1):
	i = 2
	while k % i == 0:
		cnt += 1
		i *= 2
print(cnt)

Ruby
行列の転置
N, K = gets.split.map(&:to_i)
A = N.times.map { gets.split.map(&:to_i) }
K.times do |i|
	N.times do |j|
		if j > 0
			print ' '
		end
		print A[j][i]
	end
	puts
end
かけ算表
N = gets.to_i
A = gets.split.map(&:to_i)
N.times do |i|
	N.times do |j|
		if j > 0
			print ' '
		end
		print A[i] * A[j]
	end
	puts
end
素数の個数
N = gets.to_i
cnt = 0
(2..N).each do |k|
	(2..k).each do |i|
		if i == k
			cnt += 1
		elsif k % i == 0
			break
		end
	end
end
p cnt
log2
N = gets.to_i
cnt = 0
(1..N).each do |k|
	i = 2
	while k % i == 0
		cnt += 1
		i *= 2
	end
end
p cnt

Scala
行列の転置
import scala.io.StdIn._

object Main extends App{
	val Array(n, k) = readLine().split(' ').map { _.toInt }
	val A = Array.fill(n){ readLine().split(' ').map { _.toInt } }
	for (i <- 0 until k) {
		for (j <- 0 until n) {
			if (j > 0) print(' ')
			print(A(j)(i))
		}
		println()
	}
}
かけ算表
import scala.io.StdIn._

object Main extends App{
	val n = readInt()
	val A = readLine().split(' ').map { _.toInt }
	for (i <- 0 until n) {
		for (j <- 0 until n) {
			if (j > 0) print(' ')
			print(A(i) * A(j))
		}
		println()
	}
}
素数の個数
import scala.io.StdIn._

object Main extends App{
	val n = readInt()
	var cnt = 0
	for (k <- 2 to n) {
		var i = 2
		while (i < k && k % i != 0) i += 1
		if (i == k) cnt += 1
	}
	println(cnt)
}
log2
import scala.io.StdIn._

object Main extends App{
	val n = readInt()
	var cnt = 0
	for (k <- 1 to n) {
		var i = 2
		while (k % i == 0) {
			cnt += 1
			i *= 2
		}
	}
	println(cnt)
}

Swift
行列の転置
let nk = readLine()!.split(separator: " ").compactMap { Int($0) }
let (n, k) = (nk[0], nk[1])
var A: [[Int]] = []
for _ in 0..<n {
	A.append(readLine()!.split(separator: " ").compactMap { Int($0) })
}
for i in 0..<k {
	var T: [Int] = []
	for j in 0..<n {
		T.append(A[j][i])
	}
	print(T.map { String($0) }.joined(separator: " "))
}
かけ算表
let n = Int(readLine()!)!
let A = readLine()!.split(separator: " ").compactMap { Int($0) }
for i in 0..<n {
	var P: [Int] = []
	for j in 0..<n {
		P.append(A[i] * A[j])
	}
	print(P.map { String($0) }.joined(separator: " "))
}
素数の個数
let n = Int(readLine()!)!
var cnt = 0
for k in 2...n {
	for i in 2...k {
		if i == k {
			cnt += 1
		} else if k % i == 0 {
			break
		}
	}
}
print(cnt)
log2
let n = Int(readLine()!)!
var cnt = 0
for k in 1...n {
	var i = 2
	while k % i == 0 {
		cnt += 1
		i *= 2
	}
}
print(cnt)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?