소수 구하는 로직 정리
1은 소수값이 아니므로 2부터 시작을하며,
입력된 숫자의 값보다 작은 수들로 몫을 구했을 때 0이 나오면 소수가 아니다.
예를 들어, input : 7을 처리한다하면
7%2!=0, 7%3!=0, 7%4=0, 7%5!=0, 7%6!=0을 먼저 해보고 나누어 떨어지지 않는 수에서
해당 숫자들에 대해 다시 for문을 돌며 해당 숫자들 중 소수값을 찾는다.
찾는 과정 중에서 for문 조건식에서 2로 나눈 이유는, 4이상의 수 중에서 자신의 절반 값까지는
어떤 수로 나누어도 떨어지지 않는 수이기때문에 반복횟수를 줄이기 위해 2로 나누었다.
2로 나누지않고 for(int i=2; i< n; i++)로 해도된다.
=====소스=====
using System;
using System.Collections.Generic;
using System.Text;
namespace ProblemSolution
{
class Program
{
static void Main(string[] args)
{
int input = int.Parse(Console.ReadLine());
int cnt = 0;
for (int i = 2; i <= input; i++)
{
if (IsPrime(i))
{
//Console.WriteLine(i);
//가시화를 위해 WriteLine 말고 \t 사용
Console.Write("{0}\t", i);
cnt++;
}
}
Console.WriteLine();
Console.WriteLine("2부터 {0}번 까지의 약수 : {1}개", input, cnt);
Console.ReadKey();
}
//소수값인지 확인
public static bool IsPrime(int n)
{
bool isBool = true;
for (int i = 2; i <= n / 2; i++)
{
if (n % i == 0)
{
isBool = false;
break;
}
}
return isBool;
}
}
}
=====결과=====
반응형
'Programming > C#' 카테고리의 다른 글
C# 접근 제어자 Internal란? (총 정리) (1) | 2021.11.10 |
---|---|
C# 프로퍼티(Property)란? (사용하는 이유 / Java get set) (0) | 2021.11.05 |
C# Thread.Sleep() vs Task.Delay() 함수의 차이 (0) | 2021.10.18 |
C# Array.ConvertAll 의 편의성 (0) | 2021.09.26 |
C# HashSet<T> 중복제거 (0) | 2021.09.26 |
댓글