일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- C
- 리눅스 명령어
- 백도어
- 배열
- 다중반복문
- 정보과학
- if문
- 자료구조
- 프로그래밍
- 수학영재원
- 문제출저:www.dovelet.com
- 리눅스
- 참조은요양병원
- For문
- c언어
- 정보영재원
- 풀이&소스코드저작권:왕유승
- 독후감
- C++
- DBMS
- Backdoor
- IT
- 반복문
- 정보올림피아드
- 영재교육원
- Linux
- API
- 알고리즘
- 제어문
- 독서 감상문
Archives
- Today
- Total
되는대로 살자
[C언어 기출문제&풀이] 친구 수 본문
프로그램 명: amicable
제한시간: 1 초
어떤수 A 의 약수(단, 자신은 제외)의 합을 B 라 할 때
- A 와 B 가 같으면 완전수
- B 의 약수(자신은 제외)의 합이 다시 A 가 되는 경우를 친구수라 함.
친구수가 되는 최초의 수는 220 이다.
- 220 의 약수는 1,2,4,5,10,11,20,22,44,55,110,220 이 중 자신을 제외한 약수의 합은
1+2+4+...+110 = 284
- 284 의 약수는 1,2,4,71,142,284 자신을 제외한 약수의 합은
1+2+4+71+142 = 220
입력
자연수 n ( n <= 10000 ) 을 입력으로 받아 이 수 까지의 친구수를 모두 출력하는 프로그램을 작성하는 것이 문제이다.출력
두 수가 친구 수이면 두 수중 작은수를 먼저 출력한다. 또한 친구수가 여러개 존재하면 작은 수 기준 오름차순으로 한 줄에 한 쌍씩 출력한다.입출력 예
입력 300 출력 220 284
출처:www.dovelet.com
풀이 : 약수 활용
소스코드
#include <stdio.h>
int main()
{
int n,i,j,asum=0,bsum=0,temp;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=2;j*j<i;j++)
if( i%j==0) asum+=j+i/j;
if(j*j==i) asum+=j;
asum++;
for(j=2;j*j<asum;j++)
if(asum%j==0) bsum+=j+asum/j;
if(j*j==asum) bsum+=j;
bsum++;
if(bsum==i) printf("%d %d\n",i,asum);
}
}
'2009~2014 > C/C++' 카테고리의 다른 글
[C언어 기출문제&풀이] 수 이어가기 (0) | 2010.11.10 |
---|---|
[C언어 기출문제&풀이] collatz의 추측 (0) | 2010.11.10 |
[C언어 기출문제&풀이] 정렬된 수 (0) | 2010.11.10 |
[C언어 기출문제&풀이] 거듭 제곱 테이블 (0) | 2010.11.10 |
[C언어 프로젝트] 지뢰찾기 게임 (0) | 2010.11.09 |