1학기 동안 배운 c언어를 복습하고 있다
반복문 while 을 이용해 "완전수 구하기"
여기서 생각해볼 문제 : (19줄) i를 n-1까지 다 돌릴 필요가 없다는 것! 더 간단히 만드는 코드가 있다
이보다 더 간단한 코드는 무엇일까?
내가 생각해본 답은 i <= n/2 . 이외엔 생각이 안난다
인터넷에 찾아본 결과, i * i <= n 라고 한다
n = a* b 일때, a<=b 인 경우 a가 계속 커질 수록 b는 작아지고,a = b 일때, a는 n의 제곱근이 된다따라서 n의 약수를 모두 구할 수 있다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//완전수 구하기
//자신을 제외한 약수의 합 구하기
//약수의 합이 자신과 같은지 비교
//n
//1,2,~,n-1 : i
//약수판별 (n%i) == 0
//약수라면 sum = sum +i
//if (sum == n) 완전수
//else 완전수 아님
int main(void)
{
int n, i =2,sum =1; //초기값 설정 조심
printf("n을 입력하시오: ");
scanf(" %d", &n);
while (i<n)
{
if (!(n % i)) // n%I ==0 일때 표현의 다른 방법
sum += i;
i++;
}
if (sum == n)
printf("완전수입니다.");
else
printf("완전수아니다.");
return 0;
}
|
cs |
'python' 카테고리의 다른 글
팰린드롬 문제(ex. level) (0) | 2022.07.05 |
---|---|
scanf()함수 입력오류(입력버퍼) (0) | 2022.07.02 |
scanf()의 반환값 (0) | 2022.07.02 |
캐치강연-it산업 (0) | 2022.01.21 |
캐치강연 - it 개발자의 포트폴리오 (0) | 2022.01.17 |