이 페이지는 코딩도장 데이터의 읽기 전용 정적 보관본입니다.

n을 입력받으면 양의 곱으로 표현하기

난이도:(기초)

현우는 여동생한테 곱하기를 가르쳐 주던중 곱하기를 외우기 귀찮아하던 자신의 어릴적 모습이 생각이나

어떻게하면 극복을 할 수 있을까 고민을 하던중 한가지 꼼수를 생각했다!

그것은 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이 되는 모든 양수출력!)

(이문제는 어디서 본거 같은 것을 생각해서 쓴거에요 근데 문제보다 스토리 짜기가 힘들어요..ㅠㅠ)

2018/07/15 22:26

leak

+1 추천받고싶드아. - leak, 2018/07/17 19:42

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)]

2018/07/16 04:15

Creator

추가문제 : 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]

2019/05/01 06:58

messi

python 3.6.5

n=int(input('n value : '))
print([(i,n//i) for i in range(1,int(n+0.5)) if n%i==0])

코딩도장덕에 누추한 실력이많이늘었네요 (아직형편없지만..) 더좋은문제들 가져올게요! 속도가많이느리네요ㅠㅠ

2018/07/15 22:28

leak

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));

2018/07/16 09:33

쪼렙

C lang

include

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);
    }
}

}

2018/07/16 15:00

Jaeju An

def multi(n):
     for a in range(1,n+1):
          for b in range(1,n+1):
               if a*b == n:
                    print('(%d,%d) ' %(a,b))

2018/07/16 20:33

김영성

파이썬 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)

2018/07/17 01:54

WJ K

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('')

2018/07/17 06:58

구름과비

곱셈을 가르치고 싶어하는것 같아 정말 곱셈을 만들었습니다.


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;
        }
    }
}

2018/07/17 16:14

PuTa

*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}

```

2018/07/17 17:09

이원희

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 

무식하게 파봤습니다.

2018/07/17 21:58

keunji yoo

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;
            }
        }
    }
}

2018/07/19 09:03

정몽준

#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))

다른분들보니 간단하고 효율적으로 코딩하시네요.. 열심히 보고 배우겠습니당

2018/07/20 15:13

IN K

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, []);

2018/07/20 20:40

Noname

include

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;

}

2018/07/21 01:21

Kyoung Gun Kim

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)

2018/07/21 18:10

code_sang

#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;
}

연산자로 해봤습니다.

2018/07/23 21:06

이재호 (OverEasy)

Swift입니다.

두개의 정수 곱으로 결과를 보여줍니다.

let number = Int(readLine()!)!
for divider in 1...number {
    if number % divider == 0 {
        print("\(divider) x \(number / divider)")
    } 
}

2018/07/27 05:41

졸린하마

자바스크립트입니다.

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 )

2018/07/27 10:38

김병관

자바

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} 같은 형식으로 출력
            }
        }
    }
}

2018/07/27 11:54

최시우

#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;
}

2018/07/27 19:20

Jun ki Kim

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+")");               
            }
    }
}

2018/08/03 11:51

P Sonya

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="")




2018/08/04 14:04

이주호

C#

 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);
            }
        }

2018/08/09 13:11

이경수

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);
    }



}

2018/08/11 22:43

luc

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();
    }

}

2018/08/20 16:54

gregorio

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을 사용하였습니다. 이해를 돕기 위해 코드 사이에 적당한 위치에 알고리즘, 함수 차용 이유 를 기술하였습니다.

2018/08/23 14:24

aa

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

2018/08/24 14:45

아뇩다라삼먁삼보리

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))

2018/12/20 20:52

오소영

//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+") ");
            }
        }

    }

}

2019/01/08 16:04

GammaKnight

비쥬얼 스튜디오 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);
        }
    }
}

2019/03/21 15:54

Albert

n = int(input("Input a number: "))

for div in range(1,n+1):
    if n%div == 0:
        print(f"({div},{int(n/div)})")

2019/04/16 00:56

Wonjin Park

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()

2019/07/04 14:18

문기훈

#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;
}

이중 반복문을 통해 소스 구현했습니다.

2019/09/24 09:31

Ecarose

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]]

2019/09/25 14:19

GG

#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;
            }
        }
    }
}

2019/12/21 12:12

저택벚꽃

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;
}

2019/12/24 04:29

Anderson

#기본 유형(두 쌍의 곱으로 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님의 코드를 참고해서 공부했습니다.

2020/01/22 17:11

박시원

문제

# 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, [])

2020/07/23 16:44

김한얼

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)

2021/04/03 22:12

fox.j

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 + ")");
                }
            }
        }
    }   
}

2022/02/24 15:34

Kkubuck

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이 되는 모든 양수출력되도록 짜보았습니다.

2022/09/21 22:27

유로

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);
                }
            }
        }
    }
}

2023/09/19 12:30

insperChoi

목록으로