난이도:(기초)
현우는 여동생한테 곱하기를 가르쳐 주던중 곱하기를 외우기 귀찮아하던 자신의 어릴적 모습이 생각이나
어떻게하면 극복을 할 수 있을까 고민을 하던중 한가지 꼼수를 생각했다!
그것은 n을 입력받고 두개의 양수의 곱이 n이 되는 모든 양수를 출력하는 프로그램을 만드는 것이다!
ex : 18 > (18,1)(9,2)(6,3)(3,6)(2,9)(1,18) #9,2와 2,9는다른것으로본다.
오늘도 귀찮은 현우를 위해 오늘도 힘써주자!
(난이도 up.ver: n과m을 입력받고 m개의 양수의 곱이 n이 되는 모든 양수출력!)
(이문제는 어디서 본거 같은 것을 생각해서 쓴거에요 근데 문제보다 스토리 짜기가 힘들어요..ㅠㅠ)
43개의 풀이가 있습니다.
python 3.6
divisor = lambda n: ((i, n//i) for i in range(1,int(n**0.5)+1) if not n%i)
for i in divisor(int(input('n: '))):
if i[0]==i[1]: print(i)
else: print(i, (i[1],i[0]),sep='\n')
약수 구하는 문제네요.
제곱근 까지 루프를 돌립니다.
추가 문제
def soinsubunhae(n):
for i in range(2, int(n**0.5)+1):
if n%i == 0: return [i] + soinsubunhae(n//i)
return [n]
def func(el, m):
result = []
for i in range(m**len(el)):
r = [1 for _ in range(m)]
for j in range(len(el)):
r[(i//m**j) % m] *= el[j]
if r.count(1) <= m: result.append(tuple(sorted(r))) # 1을 포함하지 않는 집합을 구하려면 m을 0으로
return sorted(set(result))
n, m = map(int,input('n m: ').split())
print(func(soinsubunhae(n), m))
소인수 분해하여 요소들을 m개의 묶음으로 묶습니다.
추가 문제는 순서를 고려하지 않았습니다.
순서까지 고려하겠다면 각 요소마다 permutations 을 돌립니다.
결과
n m: 320 4
[(1, 1, 1, 320), (1, 1, 2, 160), (1, 1, 4, 80), (1, 1, 5, 64), (1, 1, 8, 40), (1, 1, 10, 32), (1, 1, 16, 20), (1, 2, 2, 80), (1, 2, 4, 40), (1, 2, 5, 32), (1, 2, 8, 20), (1, 2, 10, 16), (1, 4, 4, 20), (1, 4, 5, 16), (1, 4, 8, 10), (1, 5, 8, 8), (2, 2, 2, 40), (2, 2, 4, 20), (2, 2, 5, 16), (2, 2, 8, 10), (2, 4, 4, 10), (2, 4, 5, 8), (4, 4, 4, 5)]
추가문제 : m개의 양수의 곱이 n이 되는 모든 경우 출력
def search(n, L=[], depth=1):
global m
if depth == m:
print(L+[n])
return
for i in range(1, n+1):
if n%i == 0:
search(n//i, L+[i], depth+1)
>>> m=3
>>> n=18
>>> search(n)
[1, 1, 18]
[1, 2, 9]
[1, 3, 6]
[1, 6, 3]
[1, 9, 2]
[1, 18, 1]
[2, 1, 9]
[2, 3, 3]
[2, 9, 1]
[3, 1, 6]
[3, 2, 3]
[3, 3, 2]
[3, 6, 1]
[6, 1, 3]
[6, 3, 1]
[9, 1, 2]
[9, 2, 1]
[18, 1, 1]
n=int(input('n value : '))
print([(i,n//i) for i in range(1,int(n+0.5)) if n%i==0])
코딩도장덕에 누추한 실력이많이늘었네요 (아직형편없지만..) 더좋은문제들 가져올게요! 속도가많이느리네요ㅠㅠ
function solution(n){
var answer = "";
for(var i =1; i <= n; i++){
if(n%i == 0){
answer += "("+n/i+","+i+")";
}
}
return answer;
}
console.log(solution(n));
C lang
int main(){ int i, remainder; printf("Please enter the num : "); scanf("%d",&i);
for(int j =1; j <= i; j++)
{
if( i % j == 0)
{
remainder = i / j;
printf("(%d,%d)",remainder,j);
}
}
}
파이썬 3
def fn(n):
for i in range(1, n+1):
if n % i == 0:
print((n // i, i), end=" ")
fn(18)
결과
(18, 1) (9, 2) (6, 3) (3, 6) (2, 9) (1, 18)
n = int(input())
cd = [ x for x in range(1, n//2+1) if n % x == 0 ] + [n]
for i in cd:
print("({},{})".format( i, n//i ), end='' )
print('')
곱셈을 가르치고 싶어하는것 같아 정말 곱셈을 만들었습니다.
import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.Scanner;
public class main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
ArrayList<String> result = new ArrayList<>();
int input;
try {
System.out.println("입력해주세요 : ");
input = scan.nextInt();
for (int i = 1; i <= input; i++) {
for (int j = 1; j <= input; j++) {
if (i * j == input) {
result.add(i + " * " + j);
}
}
}
System.out.println(result);
} catch (InputMismatchException e) {
System.out.println("땍 똑바로 입력하지 못할까");
return;
}
}
}
*import java.util.;
class h2 { public static void main(String[] args) { int num,a,b,i,j; Scanner s = new Scanner(System.in); num=s.nextInt(); System.out.print(num+" > "); for (a=1;a<=num;a++) { for (b=1;b<=num;b++) { if(ab==num) { System.out.print("("+a+","+b+")"); } } } }* }```{.java}
```
a = int(input("num : "))
result = []
print(a)
for i in range(0,a+1):
if not (i&1):
for j in range(1,a+1):
if (i*j) == a:
print(f"({i},{j})")
else: pass
무식하게 파봤습니다.
class Main {
static int n, a;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
a = n;
b : for (int i=1; i<=n/2; i++) {
for (int j=a; j>=i; j--) {
if (i*j == n) {
System.out.print("("+ i + ", " + j + ")"+"("+ j + ", " + i + ")");
a = j;
break;
}
if (i>=a)
break b;
}
}
}
}
#n입력 받으면 양의 곱으로 표현하기
def ret (x):
result=[]
for i in range(1,x+1):
if x%i==0:
result.append((i, x//i))
else :
continue
return result
print(ret(100))
다른분들보니 간단하고 효율적으로 코딩하시네요.. 열심히 보고 배우겠습니당
JavaScript
//소인수분해
function factorsOf(n) {
var factors = [1];
var d = 2;
while (n > 1) {
if (n % d == 0) {
factors.push(d);
n /= d;
}
else {
d++;
}
}
return factors;
}
function permutation(arr, result) {
if (arr.length == 0) {
console.log(result);
} else {
for (var i = 0; i < arr.length; i++) {
result.push(arr[i]);
permutation(arr.slice(0, i).concat(arr.slice(i+1)), result);
result.pop();
}
}
}
// 소인수 배열을 m 개 부분배열로 분할하고,
// 각 부분배열의 곱을 result 배열에 저장한다.
function partition(arr, n, m, result) {
if (m == 0 && n == 1) {
//console.log(result);
permutation(result, []); // 구한 결과의 permutation을 출력한다.
console.log('\n');
return;
}
if (m == 0 || n < 1)
return;
// arr => arr[0..i], arr[i+1..] 로 나눈다.
// arr[0..i]의 곱을 result 마지막에 삽입하고,
// arr[i+1..] 에 대해 재귀호출 수행
result.push(1);
var last = result.length - 1;
for (var i = 0; i < arr.length - m + 1; i++) {
result[last] *= arr[i];
partition(arr.slice(i+1), n / result[last], m - 1, result);
}
result.pop();
}
var n = 18;
var m = 2;
//console.log(factorsOf(n));
partition(factorsOf(n), n, m, []);
void Funcion(int num) { int Anum = 0; int numbers[2][50] = { 0 };
for (int i = 1; i <= num; i++)
{
if ((num%i) == 0)
{
numbers[0][Anum] = i;
numbers[1][Anum] = num / i;
Anum++;
}
else
continue;
}
printf("%d를 두 약수들의 곱으로 나타내면,\n");
for (int i = 0; i < 50; i++)
{
if (numbers[0][i] != 0 || numbers[1][i] != 0)
printf("%d X %d\n", numbers[0][i], numbers[1][i]);
else
break;
}
printf("입니다.\n");
}
int main(void) { int num1 = 0; printf("100이하인 정수를 두개의 약수의 곱으로 나타내는 프로그램입니다.\n"); printf("정수를 입력하세요 : "); scanf("%d", &num1);
Funcion(num1);
return 0;
}
number=int(input("양수를 입력하세요 : "))
result=[]
for n in range(1,number+1):
if number % n == 0:
result1 = (number//n,n)
result.append(result1)
else:
pass
print(result)
#pragma warning (disable : 4996)
#include <stdio.h>
int main()
{
int temp[100] = { 0 };
int i, n = 0;
printf("양수 n을 입력하세요 : ");
scanf("%d", &n);
printf("%d > ", n);
for (i = n; i > 0; i--)
{
if (n % i == 0)
{
printf("(%d, %d) ", i, n / i);
}
}
return 0;
}
연산자로 해봤습니다.
Swift입니다.
두개의 정수 곱으로 결과를 보여줍니다.
let number = Int(readLine()!)!
for divider in 1...number {
if number % divider == 0 {
print("\(divider) x \(number / divider)")
}
}
자바스크립트입니다.
e.g.
36이 주어짐
36을 루트하면 6
그럼
1부터 6까지 36을 나누어 떨어지는 수를 찾음
1, 2, 3, 4, 6
여기에 해당하는 몫은
36, 18, 12, 9, 6
결과: [1,36], [2. 18], [3. 12]. [4, 9], [6, 6]
중복된 [6.6] 한 번 제외하고 위의 값을 대칭해서 그대로 추가
const getMultiply = number => {
let resultArr = []
const max = Math.floor( Math.sqrt(number) ) // 숫자가 주어지면 루트하고 내림해서, 루프의 max값으로 선택
for (let i=1; i<=max; i++) {
if (number % i === 0) {
const q = number / i
resultArr = [
...resultArr,
... i == q
? [ [i, q] ] // e.g. 주어진 값이 36일 때 6.6은 중복되므로, 대칭 하지 않음
: [ [i, q], [q, i] ]
]
}
}
return resultArr
}
const result = getMultiply( Math.floor( Math.random() * 100 ) ) // 랜덤 받아서 곱의 쌍 콘솔로 표시
console.log( result )
자바
import java.util.Scanner;//Scanner 함수 사용을 위한 import
public class decate {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();//숫자를 입력받음
for(int i = 1; i <= num; i++) {//1~ num 까지 반복
if(num % i == 0) {//i 가 num 의 약수(약수는 나누어 떨어짐) 인지 확인
System.out.printf("{%d,%d}",i,(num/i));//i 와 num/i 를 {1,2} 같은 형식으로 출력
}
}
}
}
#include<iostream>
using namespace std;
int main()
{
int m,n;
int *p = new int[100];
int size = 0;
cout << "m을 입력하시오>>";
cin >> m;
cout << "n을 입력하시오>>";
cin >> n;
for (int i = 1; i <= m; i++)
if (m%i == 0)
{
p[size] = i;
size++;
}
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
if (n == p[i] * p[j])
cout << '(' << p[i] << ',' << p[j] << ')' << endl;
}
}
delete[] p;
}
import java.util.Scanner;
public class RIGHTNOW {
static int n;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
for (int i = 1; i <= n; i++) {
if(n % i ==0)
System.out.print("("+i + ", " + n/i+")");
}
}
}
Basic = int(input("입력: "))
list_Basic = []
for x in range (1, Basic+1):
list_Basic.append(x)
for i in list_Basic:
if (Basic % i == 0):
print("(%d, %d)" % (i, Basic / i),end="")
public void GetPostiveNumberMultiple(int number)
{
List<int[]> pairList = new List<int[]>();
for (int i = 1; i < number + 1; i++)
{
for (int j = 1; j < number + 1; j++)
{
if (i * j == number)
{
int[] multiples = new int[] { i, j };
pairList.Add(multiples);
}
}
}
foreach (var pair in pairList)
{
for (var index = 0; index < pair.Length; index++)
{
if(index % 2 == 0)
Console.WriteLine("============");
var i = pair[index];
Console.WriteLine(i);
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void print(int n)
{
for(int i=1;i<=n;i++)
{
if(n%i==0)
{
System.out.printf("(%d,%d)\n",i,n/i);
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input="0";
try {
input = br.readLine();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int n = Integer.parseInt(input);
print(n);
}
}
public class TEST09 {
public static void main(String[] args) {
String result = compute(256);
System.out.println(result);
}
public static String compute(int n) {
StringBuilder sb = new StringBuilder();
for (int i = n; i >= 1; i--) {
for (int k = 1; k <= n; k++) {
int multi = i * k;
if (multi == n) {
sb.append("(").append(i).append(",").append(k).append(")");
}
else if (multi > n) {
break;
}
}
}
return sb.toString();
}
}
def sqrt(a):
ip = 0
deci_len = 2
while (ip + 1) ** 2 <= a:
ip = ip + 1
deci_list = list()
i = 1
approx = ip
while i <= deci_len:
deci_dyn = 0
stck = 0.1 ** i
while (approx + stck) ** 2 <= a:
deci_dyn = deci_dyn + stck
approx = approx + stck
deci_list.append(deci_dyn)
i = i + 1
approx_list = ip
for j in deci_list:
approx_list = approx_list + j
return approx_list
# 약수를 제곱근 이하에서만 탐색하도록 하기 위해 제가 만든 제곱근 함수를 가져왔습니다.
def divisor_pair(a):
lst_left = list()
lst_right = list()
half = int(sqrt(a))
for i in range(1, half + 1):
if a % i == 0:
c = [i, int(a/i)]
b__ = tuple(c)
b = list(b__)
# reverse 함수를 사용하면 이후 대입한 변수자리까지 영향이 있기에
# 값만을 취하기 위해서 자료형 변환을 해주었습니다.
c.reverse()
lst_right.append(c)
if not b == c:
lst_left.append(b)
# 만약 입력값이 제곱수이고, i가 제곱근일 땐, b는 길이가 1이기에 제외시키게끔 하였습니다.
lst_right.reverse()
# 위에서 언급한 탐색 범위에서 양 끝에서부터 리스트를 채워나가도록 하였습니다.
lst_pair = lst_left + lst_right
return lst_pair
val = int(input("put number"))
print(divisor_pair(val))
저는 python을 사용하였습니다. 이해를 돕기 위해 코드 사이에 적당한 위치에 알고리즘, 함수 차용 이유 를 기술하였습니다.
Ruby
arr = []
n = gets.chomp.to_i
(1..n).each do |i|
(1..n).each do |j|
arr << [i, j] if i * j == n
end
end
arr.each do |i| puts "(#{i[0]}, #{i[1]})" end
def multi(n):
multilist = []
for i in range(1,n+1):
if n%i==0:
multilist.append(i)
for i in multilist:
for j in range(1,n+1):
if i*j == n:
print('(%d,%d)'%(i,j))
//n을 입력받으면 양의 곱으로 표현하기
import java.util.Scanner;
public class solve1 {
public static void main(String[] args) {
Scanner n=new Scanner(System.in);
System.out.print("수 입력: ");
int num=n.nextInt();
System.out.println("");
for(int i=1;i<=num;i++) {
if(num%i==0) {
System.out.print("("+i+","+num/i+") ");
}
}
}
}
비쥬얼 스튜디오 2017로 작성했습니다. LV 3인데 코딩해보니 의외로 코드가 짧더라고요. 추천부탁드립니다^^
#include <stdio.h>
#include <iostream>
using namespace std;
void main() {
int n;
printf("n을 입력하세요 : ");
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
if (i * j == n)
printf("(%d %d) ", j, i);
}
}
}
n = int(input("Input a number: "))
for div in range(1,n+1):
if n%div == 0:
print(f"({div},{int(n/div)})")
def mul():
n=int(input("양의 정수를 입력하세요:"))
i=1
j=1
for i in range(n+1):
for j in range(n+1):
if i*j==n:
print((i,j))
mul()
#include <stdio.h>
#include <string.h>
int main(void)
{
int n; //입력 받을 변수
printf("입력받을 변수를 기입하시오 : ");
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
if (i*j == n)
{
printf("(%d,%d)",i, j);
}
}
}
return 0;
}
이중 반복문을 통해 소스 구현했습니다.
n = int(input("input :"))
result = []
n_list = list(range(1, n+1))
for k in n_list :
if int(n%k) == 0 :
result.append([k, int(n/k)])
result
결과
input :18 [[1, 18], [2, 9], [3, 6], [6, 3], [9, 2], [18, 1]]
#include <iostream>
using namespace std;
int main(){
int m,n,a;
cin>>a;
for(m=1;m<=a;m++){
for(n=a;n>0;n--){
if(a==m*n){
cout<<'('<<m<<','<<n<<')'<<endl;
}
}
}
}
int** submultiple(int n, m)
{
int *PrimeFactors = new int;
int counter1 = 0;
while(n>1)
{
for(int i =2; i<n;i++)
{
n%i == 0? PrimeFactors[counter1]=i,counter1++ , n = n/i: 0;
}
}
int resultSize = 1;
int counter2 =0;
counter2 = pow(m,counter1);
int **Result = new int*[resultSize];
int counter3 =0;
for(int i =0; i< resultSize;i++)
{
Result[i] = new int[m];
}
for(int i =0; i< resultSize; i++)
{
for(int j= 0; j< m; j++)
{
Result[i][j] = 1;
int checker = new int;
int checker_lastposition = 0;
for(int k =0; k<m;k++)
{
int temp = counter3;
int temp2 = 0;
int counter4 = 0;
while(temp != 1)
{
temp%m !=0 ? checker_lastposition = temp%m, temp -=temp%m : 0;
temp2 =1 ;
counter4 =0;
while(temp>temp2&& temp<temp2*m)
{
temp2*=m, counter4++;
}
checker[counter4] = 1;
}
checker_lastposition != 0 ? checker[counter4+1] = checker_lastposition : 0 ;
checker[k] == true?Result[i][j] *= PrimeFactor[k]: 0;
}
counter3++;
}
}
return result;
}
#기본 유형(두 쌍의 곱으로 n을 표현)
n=int(input("숫자 n을 입력하십시오:"))
elst=[]
for i in range(1,int(n**(1/2))+1): #n의 약수를 구해 elst에 추가
if n%i==0:
elst.append(i)
elst.append(n//i)
lst=[]
for n1 in elst: #elst에 있는 n의 약수들을 2쌍 뽑는데 2쌍의 곱이 n이 되는 것만 lst에 추가
for n2 in elst:
if n1*n2==n:
lst.append([n1,n2])
print(",".join(list(map(str,lst))))
#업그레이드 버전(m개의 쌍의 곱으로 n을 표현)
nlst=[]
n=int(input("숫자 n을 입력하십시오:"))
m=int(input("m개의 곱의 쌍으로 n을 표현합니다. m을 입력하십시오: "))
def fuc(n,et=(),s=1):
global m #함수 밖의 m을 선언
if s==m:
et=et+(n,) #튜플의 요소가 하나일 땐 반드시 (1,)처럼 ,를 붙여야 한다.
nlst.append(et)
return
for i in range(1,n+1): #여기서 범위를 n+1까지가 아니고 제곱근의 +1까지로 쓰게 되면 곱의 쌍이 제대로 출력 안 됨.
if n%i==0:
fuc(n//i,et+(i,),s+1)
fuc(n)
print(",".join(list(map(str,nlst))))
업그레이드 버전은 n=18, m=1일때 (18,)로 출력하네요. 기본 유형은 바로 풀었으나 업그레이드 버전의 아이디어가 떠오르지 않아서 messi님의 코드를 참고해서 공부했습니다.
문제
# n을 입력받으면 양의 곱으로 표현하기
n = 18
result = [((x+1), n//(x+1)) for x in range(n) if n % (x+1) == 0]
result
추가문제
# n을 입력받으면 양의 곱으로 표현하기 (추가문제)
n = 16
m = 3
result = []
def permutate(dept, div, perm):
if dept == 0:
print(perm+[div])
result.append(perm+[div])
return
for i in range(1, div+1):
if div % i != 0:
continue
permutate(dept-1, div // i, perm+[i])
permutate(m-1, n, [])
a=int(input("숫자를 입력하세요 : "))
b={}
for i in range(1,a+1):
for j in range(1,i+1):
if i*j==a:
if i==j:
b[i]=j
b[i]=j
b[j]=i
print(b)
추가문제
from itertools import permutations # 순열 과 조합 툴
n = int(input("곱의 값: "))
m = int(input("이루어진 정수의 수 :"))
c=[]
items=[]
for i in range(1,n+1):
items.append(str(i))
a = list(map(' '.join,permutations(items,m)))
for i in a:
w=1
i = i.split()
for j in range(len(i)):
w*=int(i[j])
if w==n:
c.append(i)
print(c)
public class test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num =sc.nextInt();
for(int i=1; i<=num; i++) {
for(int j=1; j<=num; j++) {
if(num==i*j) {
System.out.print("(" + i + "," + j + ")");
}
}
}
}
}
import java.util.ArrayList;
import java.util.Scanner;
import java.util.ListIterator;
public class FindProduct {
ArrayList<String> list = new ArrayList<>();
ArrayList<Integer> coupleForTest = new ArrayList<>();
static Scanner scan = new Scanner(System.in);
public static void main(String[] args) {
FindProduct findProduct = new FindProduct();
int inputNumber;
int size;
// *** Get data about number and size.
while(true) {
System.out.print("$ Enter a number: ");
inputNumber = scan.nextInt();
System.out.print("$ Enter size: ");
size = scan.nextInt();
if(inputNumber<=0)
System.out.println("The number entered is less than 0.");
else if(size<2)
System.out.println("The size entered is less than 2.");
else
break;
}
// *** Initialization
findProduct.initArrayList(size);
// *** Find couple of product & add new couple.
findProduct.findCoupleAndAddCouple(inputNumber, size);
// *** Print list of couples.
findProduct.printList();
}
private void initArrayList(int size) {
for(int i=0; i<size; i++) {
coupleForTest.add(1);
}
}
private void findCoupleAndAddCouple(int inputNumber, int size) {
int count = 1;
while(count < Math.pow(inputNumber, size)-Math.pow(inputNumber, size-1)+1) {
// ** size-1 번째 인덱스에 더하기 1
coupleForTest.set(size-1, coupleForTest.get(size-1)+1);
// ** 정리
ListIterator<Integer> iter1 = coupleForTest.listIterator(size);
while(iter1.hasPrevious()) {
int currentNum = iter1.previous();
if(iter1.nextIndex()!=size-1)
currentNum += 1;
if(currentNum==inputNumber+1) {
iter1.set(1);
}
else {
iter1.set(currentNum);
break;
}
}
// ** 확인
int result = 1;
ListIterator<Integer> iter2 = coupleForTest.listIterator(0);
while(iter2.hasNext()) {
result *= iter2.next();
}
if(result == inputNumber) {
Couple newCouple = new Couple(coupleForTest);
list.add(0, newCouple.toString());
}
count++;
}
}
private void printList() {
System.out.print(" Result =>" );
ListIterator<String> iter = list.listIterator();
while(iter.hasNext()) {
System.out.print(iter.next());
if(iter.nextIndex()!=list.size()) {
System.out.print(",");
}
}
}
}
class Couple {
private ArrayList<Integer> couple = new ArrayList<>();
public Couple(ArrayList<Integer> newCouple) {
couple = newCouple;
}
public String toString() {
String output = " (";
int size = couple.size();
for(int i=0; i<size; i++) {
if(i!=size-1) {
output += couple.get(i) + ", ";
}else {
output += couple.get(i);
}
}
output += ")";
return output;
}
}
n과m을 입력받고 m개의 양수의 곱이 n이 되는 모든 양수출력되도록 짜보았습니다.
using System;
using System.Collections.Generic;
namespace solution
{
class Program
{
static void Main(string[] args)
{
Console.Write("n을 입력: ");
int n = int.Parse(Console.ReadLine());
Console.Write("m개의 양수의 곱(m 입력): ");
int m = int.Parse(Console.ReadLine());
Console.WriteLine();
if (m == 2)
twoProduct(n);
else
{
for (int i = 1; i < 1+(int)Math.Pow(n, 1.0/m); i++)
{
if(n%i==0 && n/i >= i)
mProduct(n/i, m, i, new List<int>() { i });
}
}
Console.WriteLine();
}
private static void twoProduct(int n)
{
for (int i = n; i > 0; i--)
{
if(n % i == 0)
Console.Write(" ({0}, {1})", i, n/i);
}
}
private static void mProduct(int n, int m, int start, List<int> lst)
{
if(lst.Count == m-1)
{
lst.Add(n);
Console.Write(" ({0})", string.Join(",", lst));
return;
}
for (int i = start; i < n; i++)
{
if (n % i == 0 && n/i >= i)
{
List<int> curr = new List<int>(lst);
curr.Add(i);
mProduct(n / i, m, i, curr);
}
}
}
}
}