백준 2004번: 조합 0의 개수
https://www.acmicpc.net/problem/2004 2004번: 조합 0의 개수 첫째 줄에 정수 n, m(0≤m≤n≤2,000,000,000, n!=0)이 들어온다. www.acmicpc.net 문제 nCm의 끝자리 0의 개수를 출력하는 프로그램을 작성하시오. 코드 #include using namespace std; int main(void){ long long n, m; cin>>n>>m; long long ans5 = 0; long long ans2 = 0; // 5의 개수 for(long long i = 5; i
2020.05.18
백준 1676번: 팩토리얼 0의 개수
https://www.acmicpc.net/problem/1676 1676번: 팩토리얼 0의 개수 N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오. www.acmicpc.net 문제 N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오. 코드 #include using namespace std; int main(void){ int n; cin>>n; int ans = 0; // 5! = 120 // 10! = 3,628,800 // 15! = 1,307,674,368,000 // 5가 나타날 때마다 0 하나 씩 증가 for(int i = 1; i
2020.05.18
백준 10872번: 팩토리얼
https://www.acmicpc.net/problem/10872 10872번: 팩토리얼 0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오. www.acmicpc.net 문제 0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오. 코드 #include using namespace std; int main(void){ int n; cin>>n; int ans = 1; for(int i = n; i > 0; i--) ans *= i; cout
2020.05.18
백준 11653번: 소인수분해
https://www.acmicpc.net/problem/11653 11653번: 소인수분해 첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다. www.acmicpc.net 문제 정수 N이 주어졌을 때, 소인수분해하는 프로그램을 작성하시오. 코드 #include using namespace std; int main(void){ int n; cin>>n; for(int i = 2; i * i
2020.05.18
백준 6588번: 골드바흐의 추측
https://www.acmicpc.net/problem/6588 6588번: 골드바흐의 추측 문제 1742년, 독일의 아마추어 수학가 크리스티안 골드바흐는 레온하르트 오일러에게 다음과 같은 추측을 제안하는 편지를 보냈다. 4보다 큰 모든 짝수는 두 홀수 소수의 합으로 나타낼 수 있다. www.acmicpc.net 문제 1742년, 독일의 아마추어 수학가 크리스티안 골드바흐는 레온하르트 오일러에게 다음과 같은 추측을 제안하는 편지를 보냈다. 4보다 큰 모든 짝수는 두 홀수 소수의 합으로 나타낼 수 있다. 예를 들어 8은 3 + 5로 나타낼 수 있고, 3과 5는 모두 홀수인 소수이다. 또, 20 = 3 + 17 = 7 + 13, 42 = 5 + 37 = 11 + 31 = 13 + 29 = 19 + 23 이..
2020.05.18
백준 1929번: 소수 구하기
https://www.acmicpc.net/problem/1929 1929번: 소수 구하기 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다. www.acmicpc.net 문제 M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오. 2020/05/18 - [백준 알고리즘] - 백준 1978번: 소수 찾기 백준 1978번: 소수 찾기 https://www.acmicpc.net/problem/1978 1978번: 소수 찾기 첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다. www.acmicpc.net 문제 주어진 수 N...
2020.05.18
백준 1978번: 소수 찾기
https://www.acmicpc.net/problem/1978 1978번: 소수 찾기 첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다. www.acmicpc.net 문제 주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오. 소수의 개수를 찾기 위해 에라토스테네스의 채를 사용한다. https://ko.wikipedia.org/wiki/%EC%97%90%EB%9D%BC%ED%86%A0%EC%8A%A4%ED%85%8C%EB%84%A4%EC%8A%A4%EC%9D%98_%EC%B2%B4 에라토스테네스의 체 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 둘러보기로 가기 검색하러 가기 수학..
2020.05.18
백준 11576번: Base Conversion
https://www.acmicpc.net/problem/11576 11576번: Base Conversion 타임머신을 개발하는 정이는 오랜 노력 끝에 타임머신을 개발하는데 성공하였다. 미래가 궁금한 정이는 자신이 개발한 타임머신을 이용하여 500년 후의 세계로 여행을 떠나게 되었다. 500년 후의 www.acmicpc.net 문제 타임머신을 개발하는 정이는 오랜 노력 끝에 타임머신을 개발하는데 성공하였다. 미래가 궁금한 정이는 자신이 개발한 타임머신을 이용하여 500년 후의 세계로 여행을 떠나게 되었다. 500년 후의 세계에서도 프로그래밍을 하고 싶었던 정이는 백준 사이트에 접속하여 문제를 풀기로 하였다. 그러나 미래세계는 A진법을 사용하고 있었고, B진법을 사용하던 정이는 문제를 풀 수가 없었다. ..
2020.05.18

https://www.acmicpc.net/problem/2004

 

2004번: 조합 0의 개수

첫째 줄에 정수 n, m(0≤m≤n≤2,000,000,000, n!=0)이 들어온다.

www.acmicpc.net

 

 

 

 

문제

 

nCm의 끝자리 0의 개수를 출력하는 프로그램을 작성하시오.

 

 

 

코드

 

#include <iostream>
using namespace std;

int main(void){
	long long n, m;
	cin>>n>>m;

	long long ans5 = 0;
	long long ans2 = 0;
	
	// 5의 개수
	for(long long i = 5; i <= n; i *= 5) ans5 += n / i; // n!
	for(long long i = 5; i <= n - m; i *= 5) ans5 -= (n - m) / i; // (n - m)!
	for(long long i = 5; i <= m; i *= 5) ans5 -= m / i; // m!

	// 2의 개수
	for(long long i = 2; i <= n; i *= 2) ans2 += n / i; // n!
	for(long long i = 2; i <= n - m; i *= 2) ans2 -= (n - m) / i; // (n - m)!
	for(long long i = 2; i <= m; i *= 2) ans2 -= m / i; // m!

	cout<<(ans5 > ans2 ? ans2 : ans5);
}
728x90

'알고리즘 > 백준' 카테고리의 다른 글

백준 11724번: 연결 요소의 개수  (0) 2020.05.18
백준 1260번: DFS와 BFS  (0) 2020.05.18
백준 1676번: 팩토리얼 0의 개수  (0) 2020.05.18
백준 10872번: 팩토리얼  (0) 2020.05.18
백준 11653번: 소인수분해  (0) 2020.05.18

https://www.acmicpc.net/problem/1676

 

1676번: 팩토리얼 0의 개수

N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오.

www.acmicpc.net

 

 

 

문제

 

N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오.

 

 

 

코드

 

#include <iostream>
using namespace std;

int main(void){
	int n;
	cin>>n;

	int ans = 0;

	// 5! = 120
	// 10! = 3,628,800
	// 15! = 1,307,674,368,000

	// 5가 나타날 때마다 0 하나 씩 증가
	for(int i = 1; i <= n; i++) {
		if(i % 5 == 0) ans++;
		if(i % 25 == 0) ans++;
		if(i % 125 == 0) ans++;
	}

	cout<<ans;
}
728x90

'알고리즘 > 백준' 카테고리의 다른 글

백준 1260번: DFS와 BFS  (0) 2020.05.18
백준 2004번: 조합 0의 개수  (0) 2020.05.18
백준 10872번: 팩토리얼  (0) 2020.05.18
백준 11653번: 소인수분해  (0) 2020.05.18
백준 6588번: 골드바흐의 추측  (0) 2020.05.18

https://www.acmicpc.net/problem/10872

 

10872번: 팩토리얼

0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오.

www.acmicpc.net

 

 

 

 

문제

 

0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오.

 

 

 

코드

 

#include <iostream>
using namespace std;

int main(void){
	int n;
	cin>>n;

	int ans = 1;

	for(int i = n; i > 0; i--)
		ans *= i;

	cout<<ans;
}

 

728x90

https://www.acmicpc.net/problem/11653

 

11653번: 소인수분해

첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다.

www.acmicpc.net

 

 

 

 

문제

 

정수 N이 주어졌을 때, 소인수분해하는 프로그램을 작성하시오.

 

 

 

코드

 

#include <iostream>
using namespace std;

int main(void){
    int n;
    cin>>n; 

    for(int i = 2; i * i <= n ; i++){
        while(n % i == 0){
			cout<<i<<'\n';
            n /= i;
        }
    }

    if(n>1) cout<<n<<'\n';
}

 

에라토스테네스의 채를 사용해서도 풀이 가능

728x90

'알고리즘 > 백준' 카테고리의 다른 글

백준 1676번: 팩토리얼 0의 개수  (0) 2020.05.18
백준 10872번: 팩토리얼  (0) 2020.05.18
백준 6588번: 골드바흐의 추측  (0) 2020.05.18
백준 1929번: 소수 구하기  (0) 2020.05.18
백준 1978번: 소수 찾기  (0) 2020.05.18

https://www.acmicpc.net/problem/6588

 

6588번: 골드바흐의 추측

문제 1742년, 독일의 아마추어 수학가 크리스티안 골드바흐는 레온하르트 오일러에게 다음과 같은 추측을 제안하는 편지를 보냈다. 4보다 큰 모든 짝수는 두 홀수 소수의 합으로 나타낼 수 있다.

www.acmicpc.net

 

 

 

 

문제

 

1742년, 독일의 아마추어 수학가 크리스티안 골드바흐는 레온하르트 오일러에게 다음과 같은 추측을 제안하는 편지를 보냈다.

4보다 큰 모든 짝수는 두 홀수 소수의 합으로 나타낼 수 있다.

예를 들어 8은 3 + 5로 나타낼 수 있고, 3과 5는 모두 홀수인 소수이다. 또, 20 = 3 + 17 = 7 + 13, 42 = 5 + 37 = 11 + 31 = 13 + 29 = 19 + 23 이다.

이 추측은 아직도 해결되지 않은 문제이다.

백만 이하의 모든 짝수에 대해서, 이 추측을 검증하는 프로그램을 작성하시오.

 

 

 

 

https://ko.wikipedia.org/wiki/%EA%B3%A8%EB%93%9C%EB%B0%94%ED%9D%90%EC%9D%98_%EC%B6%94%EC%B8%A1

 

골드바흐의 추측 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 골드바흐의 추측(Goldbach's conjecture)은 오래전부터 알려진 정수론의 미해결 문제로, 2보다 큰 모든 짝수는 두 개의 소수(Prime number)의 합으로 표시할 수 있다는 것�

ko.wikipedia.org

 

 

 

코드

 

c++ 에라토스테네스

#include <iostream>
#include <math.h>
using namespace std;

const int MAX = 1000001;
int prime[MAX]; // 0: 소수,1: 소수x

// 에라토스테네스의 채 
void eratostenes(void){
	for(int i = 2; i * i < MAX; i++) {
		if(!prime[i]) // i가 소수일 경우
			for(int j = i * i; j < MAX; j += i) // i의 배수는 모두 소수가 아님 
				prime[j] = 1;
	}

	prime[1] = 1;
}

int main(void){
	ios_base::sync_with_stdio(false); 
	cin.tie(NULL); 

	int n;
	eratostenes();

	while(1){
		cin>>n;

		if(n == 0) break;

		for(int i = 3; i <= n / 2; i++) {
			if(prime[i] == 0 && prime[n - i] == 0){ 
				cout<<n<<" = "<<i<<" + "<<n - i<<'\n';
				break;
			} else if(i == n / 2)
				cout<<"Goldbach's conjecture is wrong.\n";
		}


	}
}

 

c++ cn

#include <iostream>
#include <math.h>
using namespace std;

bool cn(int n){
	int m = sqrt(double(n));

	if(n == 1) return false;

	for(int i = 2; i <= m; i++) {
		if(n % i == 0) return false;
	}

	return true;
}

int main(void){
	ios_base::sync_with_stdio(false); 
	cin.tie(NULL); 
    
	int n;

	while(1){
		cin>>n;

		if(n == 0) break;

		for(int i = 3; i <= n / 2; i++) {
			if(cn(n - i) && cn(i)){ 
				cout<<n<<" = "<<i<<" + "<<n - i<<'\n';
				break;
			}
			else if(i == n / 2) cout<<"Goldbach's conjecture is wrong.\n";
		}

	}
}

 

python 에라토스테네스

def eratos(n):
  p=2
  while p*p<=n:
    if prime[p]==True:
      for j in range(p*p, n+1, p):
        prime[j]=False
    p=p+1

if __name__ == "__main__":
  prime=[True for _ in range(1000001)]
  eratos(1000000)

  while True:
    n=int(input())
    if n==0:
      break
    else:
      for i in range(2, n):
        if prime[i]==True and prime[n-i]==True:
          print("%d = %d + %d"%(n, i, n-i))
          break
      else:
        print("Goldbach's conjecture is wrong.")
728x90

'알고리즘 > 백준' 카테고리의 다른 글

백준 10872번: 팩토리얼  (0) 2020.05.18
백준 11653번: 소인수분해  (0) 2020.05.18
백준 1929번: 소수 구하기  (0) 2020.05.18
백준 1978번: 소수 찾기  (0) 2020.05.18
백준 11576번: Base Conversion  (0) 2020.05.18

https://www.acmicpc.net/problem/1929

 

1929번: 소수 구하기

첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.

www.acmicpc.net

 

 

 

 

문제

 

M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오.

 

 

 

 

2020/05/18 - [백준 알고리즘] - 백준 1978번: 소수 찾기

 

백준 1978번: 소수 찾기

https://www.acmicpc.net/problem/1978 1978번: 소수 찾기 첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다. www.acmicpc.net 문제 주어진 수 N..

assb.tistory.com

위의 문제와 동일하게 풀면 된다. 

 

 

 

코드

 

#include <iostream>
#include <math.h>
using namespace std;

bool cn(int n){
	int m = sqrt(double(n));

	if(n == 1) return false;

	for(int i = 2; i <= m; i++) {
		if(n % i == 0) return false;
	}

	return true;
}

int main(void){
	int m, n; // m 이상, n 이하
	cin>>m>>n;

	for(int i = m; i <= n; i++)
		if(cn(i)) cout<<i<<'\n';
}
728x90

'알고리즘 > 백준' 카테고리의 다른 글

백준 11653번: 소인수분해  (0) 2020.05.18
백준 6588번: 골드바흐의 추측  (0) 2020.05.18
백준 1978번: 소수 찾기  (0) 2020.05.18
백준 11576번: Base Conversion  (0) 2020.05.18
백준 2089번: -2진수  (0) 2020.05.18

https://www.acmicpc.net/problem/1978

 

1978번: 소수 찾기

첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.

www.acmicpc.net

 

 

 

 

문제

 

주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.

 

 

 

 

소수의 개수를 찾기 위해 에라토스테네스의 채를 사용한다. 

 

https://ko.wikipedia.org/wiki/%EC%97%90%EB%9D%BC%ED%86%A0%EC%8A%A4%ED%85%8C%EB%84%A4%EC%8A%A4%EC%9D%98_%EC%B2%B4

 

에라토스테네스의 체 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 둘러보기로 가기 검색하러 가기 수학에서 에라토스테네스의 체는 소수(소수)를 찾는 방법이다. 고대 그리스 수학자 에라토스테네스가 발견하였다. 알고리즘[��

ko.wikipedia.org

 

 

 

코드

 

#include <iostream>
#include <math.h>
using namespace std;

bool cn(int n){
	int m = sqrt(double(n));

	if(n == 1) return false;

	for(int i = 2; i <= m; i++) {
		if(n % i == 0) return false;
	}

	return true;
}

int main(void){
	int count;
	int n;
	int ans = 0; // 소수의 개수 저장

	cin>>count;
	for(int i = 0; i < count; i++)  {
		cin>>n;
		if(cn(n)) ans++;
	}

	cout<<ans;
}

 

728x90

'알고리즘 > 백준' 카테고리의 다른 글

백준 6588번: 골드바흐의 추측  (0) 2020.05.18
백준 1929번: 소수 구하기  (0) 2020.05.18
백준 11576번: Base Conversion  (0) 2020.05.18
백준 2089번: -2진수  (0) 2020.05.18
백준 1212번: 8진수 2진수  (0) 2020.05.18

https://www.acmicpc.net/problem/11576

 

11576번: Base Conversion

타임머신을 개발하는 정이는 오랜 노력 끝에 타임머신을 개발하는데 성공하였다. 미래가 궁금한 정이는 자신이 개발한 타임머신을 이용하여 500년 후의 세계로 여행을 떠나게 되었다. 500년 후의

www.acmicpc.net

 

 

 

문제

 

타임머신을 개발하는 정이는 오랜 노력 끝에 타임머신을 개발하는데 성공하였다. 미래가 궁금한 정이는 자신이 개발한 타임머신을 이용하여 500년 후의 세계로 여행을 떠나게 되었다. 500년 후의 세계에서도 프로그래밍을 하고 싶었던 정이는 백준 사이트에 접속하여 문제를 풀기로 하였다. 그러나 미래세계는 A진법을 사용하고 있었고, B진법을 사용하던 정이는 문제를 풀 수가 없었다. 뛰어난 프로그래머였던 정이는 A진법으로 나타낸 숫자를 B진법으로 변환시켜주는 프로그램을 작성하기로 하였다.

N진법이란, 한 자리에서 숫자를 표현할 때 쓸 수 있는 숫자의 가짓수가 N이라는 뜻이다. 예를 들어 N은 17일 때 한 자릿수에서 사용할 수 있는 수는 0, 1, 2, ... , 16으로 총 17가지가 된다.

 

 

 

코드

 

#include <iostream>
#include <vector>
using namespace std;

int main(void){
	int a, b; // a진수 -> b진수
	int count; // a진수 수의 자리수의 개수
	int num[25]; // 각 자리수의 숫자

	cin>>a>>b;
	cin>>count;

	for(int i = 0; i < count; i++) cin>>num[i];

	// a진수 -> 10진수
	int dec = 0; 
	for(int i = 0; i < count; i++) dec = dec * a + num[i];

	// 10진수 -> b진수
	vector<int> vec;
	while(dec != 0){
		vec.push_back(dec % b);
		dec = dec / b;
	}

	// 출력
	for(int i = vec.size() - 1; i >= 0; i--){
		cout<<vec[i];
		if(i != 0) cout<<' ';
	}
}
728x90

'알고리즘 > 백준' 카테고리의 다른 글

백준 1929번: 소수 구하기  (0) 2020.05.18
백준 1978번: 소수 찾기  (0) 2020.05.18
백준 2089번: -2진수  (0) 2020.05.18
백준 1212번: 8진수 2진수  (0) 2020.05.18
백준 1373번: 2진수 8진수  (0) 2020.05.18