ft_find_next_prime

#include <unistd.h>
#include <stdio.h>
int	ft_is_prime(int nb)
{
	int	i;
	int	num;

	i = 2;
    num = 0;
    if (nb <= 1)
        return (0);
    if (nb ==2)
        return (1);
    else
    {
        while (i < nb)
        {
            if (nb % i != 0)
                num = 1;
            else
            {
                num = 0;
                break ;
            }
            i++;
        }
    }
    return (num);
}

int ft_find_next_prime(int nb)
{
    int i;

    i = 1;
    while (1)
    {
        if (ft_is_prime(nb + i) == 0)
            i++;
        else
        {
            return (nb + i);
        }
    }
}
    
int main(void)
{
    printf("%d", ft_find_next_prime(1));
}

이 코드도 타임 아웃이 발생하여서 다음과 같이 코드를 수정하였다.

#include <unistd.h>

int	ft_is_prime(int nb)
{
	long long	i;
	long long	nbb;
	int			num;

	i = 2;
	num = 0;
	if (nb <= 1)
		return (0);
	if (nb == 2)
		return (1);
	else
	{
		while (i * i <= nb)
		{
			if (nb % i != 0)
				num = 1;
			else
			{
				num = 0;
				break ;
			}
			i++;
		}
	}
	return (num);
}

int	ft_find_next_prime(int nb)
{
	int	i;

	i = 0;
	while (1)
	{
		if (ft_is_prime(nb + i) == 0)
			i++;
		else
		{
			return (nb + i);
		}
	}
}

#include <stdio.h>
int	main(void)
{
	printf("%d", ft_find_next_prime(2147483647));
}

그리고 문제를 잘 확인해보니 입력 받은 값이 소수일 때는 그 소수 자체를 출력하는 거라 i = 1에서 i = 0으로 수정을 했다.

그리고 while문에서 <를 ≤으로 수정했다. 이 차이로 9가 소수로 판정될 수 있기 때문이다.