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가 소수로 판정될 수 있기 때문이다.