SWEA/[D2]

[C언어] SWEA 1945 간단한 소인수분해

ruming 2020. 7. 17. 02:48

2, 3, 5, 7, 11로 나눈 횟수를 출력한다.

배열을 생성해 각 수로 나눠질 때마다 1씩 증가시켰다.

#include <stdio.h>
int main(void) {
	int n[5] = { 2, 3, 5, 7, 11 };
	int N, T;
	scanf("%d", &T);
	for (int tc = 0; tc < T; tc++) {
		int an[5] = { 0 };
		scanf("%d", &N);
		for (int i = 0; i < 5; i++) {
			for (;;) {
				if (N % n[i] == 0) {
					an[i]++;
					N /= n[i];
				}
				else
				{
					break;
				}
			}
		}
		printf("#%d ", tc + 1);
		for (int i = 0; i < 5; i++)	printf("%d ", an[i]);
		printf("\n");
	}
	return 0;
}

 

+예전에 풀었던 코드

#include <stdio.h>
#include <stdlib.h>
int main(void){
	int i, j;
	int T, *N = 0;
	int *a, *b, *c, *d, *e;
	scanf("%d", &T);
	a = (int*)malloc(sizeof(int)*T);
	b = (int*)malloc(sizeof(int)*T);
	c = (int*)malloc(sizeof(int)*T);
	d = (int*)malloc(sizeof(int)*T);
	e = (int*)malloc(sizeof(int)*T);
	N = (int*)malloc(sizeof(int)*T);
	for(i=0; i<T; i++)	scanf("%d", &N[i]);
	
	for(i=0; i<T; i++){	
		a[i]=0;
		b[i]=0;
		c[i]=0;
		d[i]=0;
		e[i]=0;
		for(;;){
			if(N[i] % 2 == 0){
				a[i]++;
				N[i] /= 2;
			}
			else	break;
		}
		for(;;){
			if(N[i] % 3 == 0){
				b[i]++;
				N[i] /= 3;
			}
			else	break;
		}
		for(;;){
			if(N[i] % 5 == 0){
				c[i]++;
				N[i] /= 5;
			}
			else	break;
		}
		for(;;){
			if(N[i] % 7 == 0){
				d[i]++;
				N[i] /= 7;
			}
			else	break;
		}
		for(;;){
			if(N[i] % 11 == 0){
				e[i]++;
				N[i] /= 11;
			}
			else	break;
		}
	}
	
	for(i=0; i<T; i++)	printf("#%d %d %d %d %d %d\n", i+1, a[i], b[i], c[i], d[i], e[i]);
	return 0;
}