문제

자연수 M과 N이 주어질 때 M이상 N이하의 자연수 중 소수인 것을 모두 골라 이들 소수의 합과 최소값을 찾는 프로그램을 작성하시오.

 

예를 들어 M=60, N=100이 경우 60이상 100이하의 자연수 중 소수는 61, 67, 71, 73, 79, 83, 89, 97 총 8개가 있으므로, 

이들 소수의 합은 620이고, 최소값은 61이 된다.

 

입력형식

입력의 첫째 줄에 M이, 둘째 줄에 N이 주어진다.

M과 N은 10,000이하의 자연수이며, M은 N보다 같거나 작다.

 

출력형식

M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최소값을 출력한다.

단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.

 

<코드>

#include <stdio.h>
#include <math.h>

//return 0: prime return 1: composite
int check_prime(int N)
{
	int sq, count=0;
	
	if(N == 1)
		return 1;
	
	sq = (int)sqrt(N);

	for (int i = 2; i <= sq; i++)
	{
		if (!(N%i))
		{
			count++;
		}
		
		if(count>0)
			break;
	}
	
	return count;
}

int main()
{
	int x, y, prime;
	int sum=0, first=0;
	
	scanf("%d %d", &x, &y);
	
	for(int i=x; i<=y; i++)
	{
		prime = check_prime(i);
		if(!prime)
		{
			if(!first)
				first = i;
			sum+=i;
		}
	}
	
	if(sum)
		printf("%d\n%d\n", sum, first);
	else
		printf("-1\n");
	
	return 0;
}

'코딩 > Beginner Coder' 카테고리의 다른 글

2813 : 소수의 개수  (0) 2020.05.29
1901 : 소수 구하기  (0) 2020.05.29
2811 : 소수와 합성수  (0) 2020.05.28
1009 : 각 자리수의 역과 합(Number Reverse)  (0) 2020.05.28
1002 : 최대공약수, 최소공배수  (0) 2020.05.26

문제

소수(prime number)란 1보다 큰 자연수 중 1과 자기 자신 두 개만을 약수로 갖는 수를 말한다.
합성수(composite number)란 1보다 큰 자연수 중 소수가 아닌 수를 말하며 3개 이상의 약수를 갖는다.
1은 소수도 합성수도 아니다.
5개의 자연수를 입력받아 소수인지 합성수인지를 판단하는 프로그램을 작성하시오.

 

입력형식

10억 이하의 자연수 5개가 공백으로 구분되어 주어진다.

 

출력형식

입력된 순서대로 한 줄에 한 개씩 소수이면 "prime number",

합성수이면 "composite number", 

소수도 합성수도 아니면 "number one"이라고 출력한다.

 

<코드>

#include <stdio.h>
#include <math.h>

void check_prime(int N)
{
	int sq, count=0;
	
	if(N==1)
	{
		printf("number one\n");
		return;
	}
	
	sq = (int)sqrt(N);

	for (int i = 2; i <= sq; i++)
	{
		if (!(N%i))
		{
			count++;
		}
		
		if(count>0)
			break;
	}
	
	if(!count)
		printf("prime number\n");
	else
		printf("composite number\n");
}

int main()
{
	int arr[5];
	
	for(int i=0; i<5; i++)
		scanf("%d", &arr[i]);
	
	for(int i=0; i<5; i++)
		check_prime(arr[i]);
	
	return 0;
}

'코딩 > Beginner Coder' 카테고리의 다른 글

1901 : 소수 구하기  (0) 2020.05.29
1740 : 소수  (0) 2020.05.28
1009 : 각 자리수의 역과 합(Number Reverse)  (0) 2020.05.28
1002 : 최대공약수, 최소공배수  (0) 2020.05.26
1658 : 최대공약수와최소공배수  (0) 2020.05.26

문제

양의 정수를 입력받아 역으로 보여주고 각 자리 숫자의 합을 구하는 프로그램을 작성하라.

 

입력형식

21억 이하의 양의 정수를 입력받는다. 잘못된 데이터는 입력되지 않는다. 

하나의 결과가 나온 후에도 계속 새로운 입력을 받다가 0이 입력되면 프로그램을 종료한다.

최대 10개의 양의 정수가 입력될 수 있다.

 

출력형식

입력받은 수의 역과 각 자리 숫자의 합을 공백으로 구분하여 출력한다.

유효하지않은 "0"은 출력하지 않는다. 

입력받은 수의 역도 21억 이하의 정수이다.

 

<코드>

#include<stdio.h>

int main()
{
	int N, num, sum;
	int start=0;
	
	while(1)
	{
		scanf("%d", &N);
		
		if(!N)
			break;
		
		sum=start = 0;
		for(int i=1; N/i!=0; i*=10)
		{
			num = (N%(i*10))/i;
			if(num)
				start = 1;
			
			if(start)
			{
				printf("%d", num);
				sum += num;
			}
		}
		printf(" %d\n", sum);
	}
	
	
	return 0;
}

'코딩 > Beginner Coder' 카테고리의 다른 글

1740 : 소수  (0) 2020.05.28
2811 : 소수와 합성수  (0) 2020.05.28
1002 : 최대공약수, 최소공배수  (0) 2020.05.26
1658 : 최대공약수와최소공배수  (0) 2020.05.26
2809 : 약수  (0) 2020.05.26

문제

n개의 정수를 입력받아서 최대공약수와 최소공배수를 구하는 프로그램을 작성하여 보자.

 

입력형식

첫째 줄에 N (2≤N≤10) 을 입력받고 다음 줄에 N개의 정수를 공백으로 구분하여 입력받는다.

입력받는 정수는 2이상 10 000 이하이다.데이터의 크기가 주어진 범위를 벗어나는 입력은 없다.

 

출력형식

입력받은 정수들의 최대공약수와 최소공배수를 공백으로 구분하여 출력한다.

최소공배수는 20억 이하의 정수이다.

 

<코드>

#include <stdio.h>

int gcd_get(int x, int y)
{	
	int result = 1;
	
	for(int i=1; i<=x; i++)
	{
		if(!(x%i) && !(y%i))
			result = i;
	}
	
	return result;
}

int lcm_get(int x, int y)
{
	return x*y/gcd_get(x,y);
}

int main()
{
	int N;
	int arr[10] = {0, };
	int gcd, lcm;
	
	scanf("%d", &N);
	
	for(int i=0; i<N; i++)
		scanf("%d", &arr[i]);
	
	gcd = lcm = arr[0];
	
	for(int i=1; i<N; i++)
	{
		gcd = gcd_get(gcd, arr[i]);
		lcm = lcm_get(lcm, arr[i]);
	}
	
	printf("%d %d", gcd, lcm);
	
	return 0;
}

'코딩 > Beginner Coder' 카테고리의 다른 글

2811 : 소수와 합성수  (0) 2020.05.28
1009 : 각 자리수의 역과 합(Number Reverse)  (0) 2020.05.28
1658 : 최대공약수와최소공배수  (0) 2020.05.26
2809 : 약수  (0) 2020.05.26
1402 : 약수 구하기  (0) 2020.05.25

문제

두개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오.

 

입력형식

입력 파일의 첫째 줄에는 두 개의 자연수가 주어진다.이 둘은 10,000이하의 자연수이며 사이에 한 칸의 공백이 주어진다.

 

출력형식

첫째 줄에는 입력으로 주어진 두 수의 최대공약수를 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.

 

<코드>

#include <stdio.h>

int gcd_get(int x, int y)
{	
	int result = 1;
	
	for(int i=1; i<=x; i++)
	{
		if(!(x%i) && !(y%i))
			result = i;
	}
	
	return result;
}

int lcm_get(int x, int y)
{
	return x*y/gcd_get(x,y);
}

int main()
{
	int x, y;
	
	scanf("%d %d", &x, &y);
	
	printf("%d\n%d\n", gcd_get(x,y), lcm_get(x,y));
	
	return 0;
}

'코딩 > Beginner Coder' 카테고리의 다른 글

1009 : 각 자리수의 역과 합(Number Reverse)  (0) 2020.05.28
1002 : 최대공약수, 최소공배수  (0) 2020.05.26
2809 : 약수  (0) 2020.05.26
1402 : 약수 구하기  (0) 2020.05.25
1071 : 약수와 배수  (0) 2020.05.25

문제

한 개의 정수를 입력받아 입력받은 정수의 약수를 모두 출력하는 프로그램을 작성하시오.

 

입력형식

정수 N이 주어진다. (2 ≤ N ≤ 21억)

 

출력형식

N의 약수를 작은 수부터 차례로 모두 출력한다.

 

<코드>

#include <stdio.h>
#include <math.h>

int main()
{
	int N, sq; //sq: N의 제곱근
	int arr[100000] = { 0, }; //약수
	int count = 0, tmp;

	scanf("%d", &N);

	sq = (int)sqrt(N);

	for (int i = 1; i <= sq; i++)
	{
		if (!(N%i))
		{
			arr[count++] = i;
			if (N / i != i)
				arr[count++] = N / i;
		}
	}

	for (int i = count - 1; i >= 0; i--)
	{
		for (int j = 0; j<i; j++)
		{
			if (arr[j]>arr[j + 1])
			{
				tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
			}
		}
	}

	for (int i = 0; i<count; i++)
		printf("%d ", arr[i]);

	return 0;
}

'코딩 > Beginner Coder' 카테고리의 다른 글

1002 : 최대공약수, 최소공배수  (0) 2020.05.26
1658 : 최대공약수와최소공배수  (0) 2020.05.26
1402 : 약수 구하기  (0) 2020.05.25
1071 : 약수와 배수  (0) 2020.05.25
1430 : 숫자의 개수  (0) 2020.05.25

문제

어떤 자연수 p와 q가 있을 때, 만일 p를 q로 나누었을 때 나머지가 0이면 q는 p의 약수이다.

 

6을 예로 들면
6 ÷ 1 = 6 … 0
6 ÷ 2 = 3 … 0
6 ÷ 3 = 2 … 0
6 ÷ 4 = 1 … 2
6 ÷ 5 = 1 … 1
6 ÷ 6 = 1 … 0

그래서 6의 약수는 1, 2, 3, 6, 총 네 개이다.

 

두 개의 자연수 N과 K가 주어졌을 때, N의 약수들 중 K번째로 작은 수를 출력하는 프로그램을 작성하시오.

 

입력형식

첫째 줄에 N과 K가 빈칸을 사이에 두고 주어진다. N은 1 이상 10,000 이하이다. K는 1 이상 N 이하이다.

 

출력형식

첫째 줄에 N의 약수들 중 K번째로 작은 수를 출력한다. 만일 N의 약수의 개수가 K개보다 적어서 K번째 약수가 존재하지 않을 경우에는 0을 출력하시오.

 

<코드>

#include <stdio.h>

int main()
{
	int n, k, i;
	int count=0;
	
	scanf("%d %d", &n, &k);
	
	for(i=1; i<=n; i++)
	{
		if(!(n%i))
			count++;
		
		if(count == k)
			break;
	}
	
	if(i==n+1)
		i = 0;
	
	printf("%d", i);
	
	return 0;
}

'코딩 > Beginner Coder' 카테고리의 다른 글

1658 : 최대공약수와최소공배수  (0) 2020.05.26
2809 : 약수  (0) 2020.05.26
1071 : 약수와 배수  (0) 2020.05.25
1430 : 숫자의 개수  (0) 2020.05.25
1692 : 곱셈  (0) 2020.05.19

문제

주어진 정수들 중 입력받은 수의 약수와 배수의 합을 각각 출력하라.

 

입력형식

첫 줄에 정수의 개수 n (1<= n <=40)을 입력받는다. 둘째 줄에는 n개의 정수를 한 줄에 입력 받는다. 셋째 줄에는 약수와 배수를 구할 정수 m(1<=m<=100)을 입력 받는다.

 

출력형식

첫 줄에는 정수 m의 약수의 합을 둘째 줄에는 정수 m의 배수의 합을 출력한다.

 

<코드>

#include <stdio.h>

int main()
{
	int n, m;
	int arr[40] = {0, };
	int div = 0, mul = 0;
	
	scanf("%d", &n);
	
	for(int i=0; i<n; i++)
		scanf("%d", &arr[i]);
	
	scanf("%d", &m);
	
	for(int i=0; i<n; i++)
	{
		if(!(arr[i]%m))
			mul += arr[i];
		
		if(!(m%arr[i]))
			div += arr[i];
	}
	
	printf("%d\n%d\n", div, mul);
	
	return 0;
}

'코딩 > Beginner Coder' 카테고리의 다른 글

2809 : 약수  (0) 2020.05.26
1402 : 약수 구하기  (0) 2020.05.25
1430 : 숫자의 개수  (0) 2020.05.25
1692 : 곱셈  (0) 2020.05.19
2074 : 홀수 마방진  (0) 2020.05.19

문제

세 개의 자연수 A, B, C가 주어질 때 

A×B×C를 계산한 결과에 0부터 9까지 각각의 숫자가 몇 번씩 쓰였는지를 구하는 프로그램을 작성하시오.

 

예를 들어 A = 150, B = 266, C = 427 이라면
A × B × C = 150 × 266 × 427 = 17037300 이 되고,
계산한 결과 17037300 에는 0이 3번, 1이 1번, 3이 2번, 7이 2번 쓰였다.

 

입력형식

첫째 줄에 A 둘째 줄에 B 셋째 줄에 C가 주어진다.

A B C는 모두 100보다 같거나 크고 1 000보다 작은 자연수이다.

 

출력형식

첫째 줄에는 A×B×C의 결과에 0 이 몇 번 쓰였는지 출력한다.

마찬가지로 둘째 줄부터 열 번째 줄까지 A×B×C의 결과에 1부터 9까지의 숫자가 각각 몇 번 쓰였는지 차례로 한 줄에 하나씩 출력한다.

 

<코드>

#include <stdio.h>
#include <string.h>

int main()
{
	int A, B, C;
	long mul;
	char result[10] = {0, };
	
	scanf("%d %d %d", &A, &B, &C);
	
	mul = A*B*C;
	
	for(int i=1; mul/i != 0; i*=10)
		result[(mul%(i*10))/i]++;
	
	
	for(int i=0; i<10; i++)
		printf("%d\n", result[i]);
	
	return 0;
}

'코딩 > Beginner Coder' 카테고리의 다른 글

1402 : 약수 구하기  (0) 2020.05.25
1071 : 약수와 배수  (0) 2020.05.25
1692 : 곱셈  (0) 2020.05.19
2074 : 홀수 마방진  (0) 2020.05.19
1495 : 대각선 지그재그  (0) 2020.05.12

문제

(세 자리 수) × (세 자리 수)는 다음과 같은 과정을 통하여 이루어진다.

 




(1)과 (2)위치에 들어갈 세 자리 자연수가 주어질 때 (3), (4), (5), (6)위치에 들어갈 값을 구하는 프로그램을 작성하시오.

 

입력형식

첫째 줄에 (1)의 위치에 들어갈 세 자리 자연수가, 둘째 줄에 (2)의 위치에 들어갈 세자리 자연수가 주어진다.

 

출력형식

첫째 줄부터 넷째 줄까지 차례대로 (3), (4), (5), (6)에 들어갈 값을 출력한다.

 

<코드>

#include <stdio.h>

int main()
{
	int op1, op2;
	int first, second, third;
	
	scanf("%d %d", &op1, &op2);
	
	first = op1*(op2%10);
	second = op1*((op2%100)/10);
	third = op1*(op2/100);
	
	printf("%d\n", first);
	printf("%d\n", second);
	printf("%d\n", third);
	printf("%d\n", first+(second*10)+(third*100));
	
	return 0;
}

'코딩 > Beginner Coder' 카테고리의 다른 글

1071 : 약수와 배수  (0) 2020.05.25
1430 : 숫자의 개수  (0) 2020.05.25
2074 : 홀수 마방진  (0) 2020.05.19
1495 : 대각선 지그재그  (0) 2020.05.12
1331 : 문자마름모  (0) 2020.05.12

+ Recent posts