목적
  - 소수와 약수를 출력한다.

문제
사용자 삽입 이미지

코드

#include <iostream>

using namespace std;

bool isPrime(int aIn)
{
 int i = 2;
 while(i < aIn)
 {
  if(aIn % i == 0) return false;
  i++;
 }

 return true;
}

int main(void)
{
 int i, iIn;
 i = iIn = 0;
 
 while( !(iIn > 100 && iIn < 200) )
 {
  cout << "100 ~ 200 사이의 정수값을 입력하세요 : ";
  cin >> iIn;

 }

 if(isPrime(iIn))
 {
  cout << "입력한 정수 " << iIn << " 는 소수 입니다.";
 }

 else
 {
  i = 1;
  cout << "입력한 정수 " << iIn << " 는 다음과 같은 약수를  가지고 있습니다." << endl;
  while(i < iIn)
  {
   if(iIn % i == 0) cout << i << " ";
   i++;
  }


 }

 cout << endl;

 return 0;
}


해설
  - 이전 문제와 다른 알고리듬으로 소수를 출력했습니다.
  - iostream 에서는 C 와 달리 bool 형 변수(false / true) 가 존재 합니다.

참고
  - 유사 문제

Posted by 카켈



목적
  - 소수 출력과 합을 구할줄 안다.

문제
사용자 삽입 이미지

코드

#include <iostream>

using namespace std;

int main(void)
{
 int iStart = 50;
 const int iEnd = 100;
 int iPrime, iTotal;
 int i = 2;
 iPrime = iTotal = 0;
 
 cout << "50 과 100사이에 존재하는 소수들 : ";

 while(iStart <= iEnd)
 {
  while(i < iStart)
  {
   if ( iStart % i == 0 )
   {
    iPrime = 0;
    i++;
    break;
   }

   else
   {
    iPrime = 1;
    i++;

   }

  }

  if(iPrime == 1)
  {
   cout << iStart << " ";
   iTotal += iStart;

  }

  iPrime = 0;
  i = 2;
  iStart++;

 }

 cout << endl << "50 과 100사이에 존재하는 소수들의 합 : " << iTotal << endl;

 return 0;
}


해설
  - 여러가지 알고리듬으로 풀수 있습니다. 재귀 호출을 시도하여 출력할려 했으나 실패하여 단순한 반복 알고리듬으로 대체 되었습니다. 이전 문제들을 보시고 쓸만한 소수 알고리듬을 익혀 주시기 바랍니다.

참고
  - 유사 문제


Posted by 카켈



1. 목적
  - 소수를 이해한다.
  - 사용자 정의 자료형 함수를 출력한다.

2. 문제 (점수 : 15 점)
  - 두 정수 사이에 존재하는 소수(prime)를 출력한다.
  - 입력 순서에 따른 크기 순서는 상관치 않는다.
  - 마지막에 소수의 개수를 출력한다.
  - 출력 화면

정수값 두개를 입력하세요 : 541 23
소수 : 23       29      31      37      41      43      47      53      59
61      67      71      73      79      83      89      97      101     103
107     109     113     127     131     137     139     149     151     157
163     167     173     179     181     191     193     197     199     211
223     227     229     233     239     241     251     257     263     269
271     277     281     283     293     307     311     313     317     331
337     347     349     353     359     367     373     379     383     389
397     401     409     419     421     431     433     439     443     449
457     461     463     467     479     487     491     499     503     509
521     523     541

23 와 541 사이의 소수의 개수 : 92
Press any key to continue


3. 이해
  - 소수를 정확히 이해하고 C 에 적용 시킬수 있는가?

4. 코드

#include <stdio.h>

enum bool {false, true};
enum bool isprime(int detect)
{
 int i = 2;

 if(detect <= 1) return false;

 while(i < detect)
 {
  if (detect % i == 0) return false;
  i++;
 }

 return true;

}

int main()
{
 int a, b, start, end, count;
 a = b = start = end = count = 0;

 printf("정수값 두개를 입력하세요 : ");
 scanf("%d %d", &a, &b);

 start = a < b ? a : b;
 end = a < b ? b : a;

 a = start;
 b = end;
 
 printf("소수 : ");

 while(start <= end)
 {
  if(isprime(start))
  {
   printf("%d\t",start);
   count++;
  }
  start++;
 
 }

 printf("\n\n%d 와 %d 사이의 소수의 개수 : %d\n", a, b, count);

 return 0;
}

5. 해설
  - 이전 문제와 다르게 풀기 위해서 isprime 이라는 판정 함수를 만들었습니다.
  - 사용자 정의형 bool 을 만들어서 isprime 해서 나온 값을 false / true 로 구분해서 사용했습니다.

6. 참고
  - 유사 문제

Posted by 카켈



1. 목적

  - 소수를 출력하는 알고리듬을 안다.

2. 문제 (점수 : 30 점)
  - 입력된 두 양의 정수 사이에 존재하는 소수(prime number)를 찾아내는 프로그램을 작성한다.
  - 발견된 모든 소수를 출력한다.
  - 실행 화면

시작값과 끝값을 입력하세요 : 100 1000
100과 1000사이에 존재하는 소수들 :
101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197
199 211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 293 307 311 313
317 331 337 347 349 353 359 367 373 379 383 389 397 401 409 419 421 431 433 439
443 449 457 461 463 467 479 487 491 499 503 509 521 523 541 547 557 563 569 571
577 587 593 599 601 607 613 617 619 631 641 643 647 653 659 661 673 677 683 691
701 709 719 727 733 739 743 751 757 761 769 773 787 797 809 811 821 823 827 829
839 853 857 859 863 877 881 883 887 907 911 919 929 937 941 947 953 967 971 977
983 991 997
Press any key to continue

3. 이해
  - 소수의 정의를 이해하고 C 코드로 구현할줄 아는가?
  - 반복문을 정확히 이해 하는가?

4. 코드

#include <stdio.h>

int main()
{
 int i, start, end;
 typedef enum {false, true}bool;
 bool prime = true;
 i = start = end = 0;

 printf("시작값과 끝값을 입력하세요 : ");
 scanf("%d %d", &start, &end);

 printf("%d과 %d사이에 존재하는 소수들 : \n", start, end);

 while(start <= end)
 {
  for(i = 2; i < start; i++)
  {
   prime = ( start  % i == 0 ? false : true);
   if(prime == false) break;

  }

   if(prime && start != 1) printf("%d ", start);
  start++;
 }

 return 0;
}

5. 해설
  - enum 은 열거형으로 괄호 안에 있는 순서대로 값이 되는 유용한 선언문입니다. 외부에서 그 값을 쓸려고 할때 특별한 정의가 없다면 그 자료는 0,1,2 ... 로 값이 쓰여됩니다.
  - 소수(prime number, 0이 아니고 -1 과 1 사이의 유리수인 소수와는 다른 계념입니다.)는 1을 초과 하는 수 중에 1과 수 자신의 약수 외에 1과 수 사이에 약수가 있으면 소수가 아닙니다. 특수한 수열입니다. (예 : 2 3 5 7 11 13 17 ... )
 - 2 에서 출발하여 해당수 전까지 진행하면서 나머지가 0 이면 그 수는 약수가 되므로

6. 참고
 - http://www.cinsk.org/cfaqs/html/node11.html : boolean 자료 정의 및 선언
 - 소수 설명

Posted by 카켈
이전페이지 1 다음페이지