소인수분해

김보현·2021년 12월 28일
0

코딩테스트

목록 보기
5/26

1. N!의 표현법

입력

자연수 N(3<=N<=1000)이 입력

출력

소수의 곱으로 표현
EX) 5! => 3 1 1 (2-3번, 3-1번, 5-1번)

#include <iostream>

using namespace std;

int main() {
    int n;
    cin>>n;
    
    int arr[1001]={0,};
    
    
    for(int i=2;i<=n;i++){ //2부터 N까지 반복 -> 팩토리얼
        int temp=i;
        int div=2;
        while(temp!=1){
            while(temp%div==0){ //2부터 증가하면서 나누어 떨어질때까지 반복
                arr[div]++;
                temp/=div;
            }
            div++;
        }
       
    }
    
    for(int i=2;i<=n;i++){
        if(arr[i]!=0){
            cout<<arr[i]<<" ";
        }
    }
    
    
    return 0;
}

2. N!에서 0의 개수

입력

자연수 N(10<=N<=1,000)이 입력

출력

일의 자리부터 연속된 0의 개수를 출력

1) 2와 5를 곱하면 10이 됨 
2) N을 소인수 분해하여 2와 5의 개수 구하기
3) 둘 중 작은 수에 따라 10 생성 가능 -> 일의 자리부터의 0의 개수 정해짐
#include <iostream>
#include <time.h>

using namespace std;

int main() {
    int n;
    
    cin>>n;
    int count2=0,count5=0;
    
    for(int i=2;i<=n;i++){ //2부터 N까지 반복 -> 팩토리얼
        int temp=i;
            while(temp%2==0){ //2로 나누어 떨어지는 개수
                count2++;
                temp/=2;
            }
            while(temp%5==0){ //5로 나누어 떨어지는 개수
                count5++;
                temp/=5;
            }
        
    }
   
    
    cout<<min(count2,count5)<<endl;
    
    return 0;
}
profile
📈어제보다 조금 더 성장하는 오늘을 위해

0개의 댓글