#include <iostream>
using namespace std;
//2. 유클리드 알고리즘 재귀
int gcd(int a, int b){
if(b==0){
return a;
}else{
return gcd(b,a%b);
}
}
//3. 유클리드 알고리즘 비재귀
int gcd2(int a,int b){
while(b!=0){
int r=a%b;
a=b;
b=r;
}
return a;
}
int main(){
int a,b,g;
scanf("%d %d",&a,&b);
g=1;
//1. 모든 정수
for(int i=2;i<=min(a,b);i++){
if(a%i==0 && b%i==0){
g=i;
}
}
}
#include <iostream>
using namespace std;
int gcd(int a, int b){
if(b==0)return a;
else{
return gcd(b,a%b);
}
}
int main(){
int a,b,g,l;
scanf("%d %d",&a,&b); //이 둘은 10,000이하의 자연수이며 사이에 한 칸의 공백이 주어진다.
g=gcd(a,b); //최대공약수
l=(a*b)/g; //최소공배수
printf("%d\n%d",g,l);
}
#include <iostream>
using namespace std;
int gcd(int a, int b){
if(b==0)return a;
else{
return gcd(b,a%b);
}
}
int main(){
int a,b,g,l,t;
scanf("%d",&t);
while(t--){
scanf("%d %d",&a,&b); //이 둘은 10,000이하의 자연수이며 사이에 한 칸의 공백이 주어진다.
g=gcd(a,b);
l=(a*b)/g;
printf("%d\n",l);
}
}
//양의 정수 n개가 주어졌을 때, 가능한 모든 쌍의 GCD의 합을 구하는 프로그램을 작성하시오.
#include <iostream>
using namespace std;
int gcd(int a, int b){
if(b==0)return a;
else return gcd(b,a%b);
}
int main(){
int t;
scanf("%d",&t);
while(t--){
int n;
int num[101]={0};
scanf("%d",&n);
for(int i=0;i<n;i++)scanf("%d",&num[i]);
long long int sum=0;
for(int i=0;i<n-1;i++){
for(int j=i+1;j<n;j++){
sum+=gcd(num[i],num[j]);
}
}
printf("%lld\n",sum);
}
}
ex)11을 3진법으로 바꾸는 방법
11/3=3...2
3/3=1...0
1/3=0...1
정답 102
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(){
int n,b;
scanf("%d %d",&n, &b);
string ans="";
while(n>0){
int r=n%b;
if(r<10){
ans+=(char)(r+'0');
}else{
ans+=(char)(r-10+'A');
}
n/=b;
}
reverse(ans.begin(),ans.end());
cout << ans;
}
#include <iostream>
#include <string>
using namespace std;
int main(){
int ans=0;
int b;
string s;
cin >> s >> b;
for(int i=0;i<s.size();i++){
if('0'<=s[i]&&s[i]<='9'){
ans=ans*b+s[i]-'0';
}else{
ans=ans*b+s[i]-'A'+10;
}
}
printf("%d",ans);
}
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
cin >> s;
int n = s.size();
if (n%3 == 1) {
cout << s[0];
} else if (n%3 == 2) {
cout << (s[0]-'0')*2 + (s[1]-'0');
}
for (int i=n%3; i<n; i+=3) {
cout << (s[i]-'0')*4 + (s[i+1]-'0')*2 + (s[i+2]-'0');
}
cout << '\n';
return 0;
}
#include <cstdio>
#include <string>
#include <iostream>
using namespace std;
string eight[8] = {"000","001","010","011","100","101","110","111"};
int main(){
string s;
cin >> s;
bool st = false;
if(s.length() == 1 && s[0]-'0' == 0)cout << "0";
for(int i = 0;i < s.length();i ++){
int n = s[i]-'0';
if(!st && n < 4){
if(n == 0) continue;
else if(n == 1) cout << "1";
else if(n == 2) cout << "10";
else if(n == 3) cout << "11";
st = true;
}
else{
cout << eight[n];
st = true;
}
}
return 0;
}
/*
8진수가 주어졌을 때, 2진수로 변환하는 프로그램을 작성하시오.
첫째 줄에 8진수가 주어진다. 주어지는 수의 길이는 333,334을 넘지 않는다.
첫째 줄에 주어진 수를 2진수로 변환하여 출력한다. 수가 0인 경우를 제외하고는 반드시 1로 시작해야 한다.
*/
#include <algorithm>
#include <string>
#include <iostream>
using namespace std;
int main(){
int n;
scanf("%d",&n);
string ans="";
if(n==0)printf("%d",n);
while(n!=1){
if(n>0){
if(n%(-2)==0){
ans+='0';
}else{
ans+='1';
}
}else{
if(n%(-2)==0){
ans+='0';
}else{
ans+='1';
n-=1;
}
}
n/=-2;
}
ans+='1';
reverse(ans.begin(), ans.end());
cout << ans;
}
#include <iostream>
using namespace std;
void convert(int num, int base) {
if (num == 0) return;
convert(num/base, base);
printf("%d ",num%base);
}
int main() {
int a,b;
cin >> a >> b;
int n;
cin >> n;
int ans = 0;
for (int i=0; i<n; i++) {
int x;
cin >> x;
ans = ans * a + x;
}
convert(ans,b);
return 0;
}
int p[100]; //소수 저장할 배열
int total_prime = 0; //소수의 개수
bool c[101]; //지워지면 true, 아니면 false
int n = 100; //N까지의 수
for(int i=2;i<=n;i++){
if(c[i]==false){
p[total_prime++]=i;
for(int j=i*i;j<=n;j+=i)c[j]=true;
}
}
#include <iostream>
using namespace std;
#define MAX 1000000
int p[MAX];
int total_prime=0;
bool check_prime[MAX+1];
int main(int argc, const char * argv[]) {
int n,m;
scanf("%d %d",&m, &n);
for(int i=2;i<=n;i++){
if(check_prime[i]==false){
if(i>=m){
p[total_prime++]=i;
printf("%d\n",i);
}
for(int j=i+i;j<=n;j+=i){
check_prime[j]=true;
}
}
}
}
#include <iostream>
using namespace std;
#define MAX 1000000
int p[MAX];
int total_prime=0;
bool check_prime[MAX+1];
int main(int argc, const char * argv[]) {
int t;
for(int i=2;i<=MAX;i++){
if(check_prime[i]==false){
p[total_prime++]=i;
for(int j=i+i;j<=MAX;j+=i){
check_prime[j]=true;
}
}
while(1){
scanf("%d",&t);
if(t==0)break;
for(int i=1;i<total_prime;i++){
if(check_prime[t-p[i]]==false){
printf("%d = %d + %d\n", t, p[i],t-p[i]);
break;
}
}
}
}
#include <iostream>
using namespace std;
int main(int argc, const char * argv[]) {
int n;
scanf("%d",&n);
int res = 0;
for (int i=5; i<=n; i*=5) {
res += n/i;
}
printf("%d",res);
}
#include <iostream>
using namespace std;
int main(int argc, const char * argv[]) {
long long n,m;
scanf("%lld %lld",&n,&m);
long long two=0, fiv=0;
long long i;
for (i=2; i<=n; i*=2) {
two += n/i;
}
for (i=2; i<=n-m; i*=2) {
two -= (n-m)/i;
}
for (i=2; i<=m; i*=2) {
two -= m/i;
}
for (i=5; i<=n; i*=5) {
fiv += n/i;
}
for (i=5; i<=n-m; i*=5) {
fiv -= (n-m)/i;
}
for (i=5; i<=m; i*=5) {
fiv -= m/i;
}
if(fiv>two)printf("%lld",two);
else printf("%d",fiv);
}