본문 바로가기

C언어

논리야 놀자 #2

논리 7 : n의 약수를 찾는다

의사코드

for(i = 1; i <= n; i++)

  if ( n % i == 0 )

    printf("%d\n", i);

 

약수는 어떤 자연수를 나누어떨어지게 하는 수이다.

약수는 어떤 자연수를 나누어 떨어지게 하는 수이다.

약수는 어떤 자연수를 나누어 떨어지게 하는 수이다.

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {
	int n;
	int i;

	printf("약수 : ");
	scanf("%d", &n);

	printf("%d의 약수는 ", n);
	for (i = 1; i <= n; i++)
		if (n % i == 0) printf("%d ", i);
}

 

논리 8 : n이 소수인지 아닌지를 판별한다

소수의 성질은 2부터 n-1까지 나눠지는 수가 있으면 소수가 아니다.

소수의 성질은 2부터 n-1까지 나눠지는 수가 있으면 소수가 아니다.

소수의 성질은 2부터 n-1까지 나눠지는 수가 있으면 소수가 아니다.

 

아닌걸 발견하면 스톱.

소수라는 판단을 하려면 끝까지 봐야 한다.

 

prime = 1 //소수라고 일단 설정

i ← 2 부터 (n-1) 까지

if ( n % i == 0 )

  prime = 0; //소수가 아니다 -> 나눠지는 수가 있기 때문.

  break;

 

if (prime)

  소수다

else 

  소수가 아니다

//첫 번째 방법

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {
	int n, i;
	int prime = 1;

	scanf("%d", &n);

	for (i = 2; i < n; i++)
		if (n % i == 0) {
			prime = 0;
			break;
		}
	
	if (prime)
		printf("소수이다");
	else
		printf("소수가 아니다");
}
// 두 번째 방법 사용자 정의 함수

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int isPrime(int num);

int main(void) {
	int n;
	
	scanf("%d", &n);

	if (isPrime(n) )
		printf("소수이다");
	else
		printf("소수가 아니다");
}

int isPrime(int num) {
	int i;

	if (num == 1)
		return 0;

	for (i = 2; i < num; i++)
		if (num % i == 0)
			return 0;

	return 1;
}

함수를 호출할 때는 자료형을 쓸 필요가 없다.  13행에서 isPrime(int n)이 아니라 isPrime(n)으로 써야 한다는 것.

 

 

'C언어' 카테고리의 다른 글

2021 학기말고사  (0) 2023.09.11
논리야 놀자 #3  (0) 2023.09.09
논리야 놀자 #1  (0) 2023.09.08
혼공C 도전실전 예제 내 풀이  (0) 2023.08.17
[C언어] 배열을 처리하는 함수  (0) 2023.08.15