求解答C语言求解 新人一个!!

从键盘输入一个整数,输出距离该数最近的素数。根据输入的数不同,此问题可能有一个答案(或者比输入的数大或者比输入的数小),也可能需要输出两个值(一个比输入的数大,一个比输入的数小,两个距离输入的数一样近)。PS:数学意义上的最小素数是2,例如,若输入-213,结果应是2
不要太高深 开头用#include int main for scanf printf 等等这几类基础的吧
其他复杂的就算了吧

#include<stdio.h>  

int p[10000];  

//将10000以内的所有素数枚举放到数组 p 中。 
void prime()  
{  
    int i,j;  
    for(i=2;i<10000;i++)  
        p[i]=1;  
    int k=100;  
    for(i=2;i<k;i++)  
    {  
        if(p[i])  
            for(j=i+i;j<10000;j+=i)  
                p[j]=0;  
    }  
}  

int main()  
{  
    int n;  
    prime();   
    while(scanf("%d",&n))  
    {  
        int num1,num2;
        num1=num2=99999;
        int i=n;
        if(n<0)
        {
            printf("2\n");
            continue;
        }
        while(true)
        {
            if(p[i]==1)
            {
                num1=i-n;
                break;
            }
            i++;
        }
        int x=n-1;
        while(x>0)
        {
            if(p[x]==1)
            {
                num2=n-x;
                break;
            }
            x--;
        }
        if(num1<num2)
            printf("%d\n",i);
        else if(num1==num2)
            printf("%d %d\n",i,x);
        else 
            printf("%d\n",x); 
    }  
    return 0;  
}  

数据小的用这个应该可以,数据大的用筛法求素数

 #include "stdio.h"
#include "math.h"
int isprime(int n){
int r = sqrt(n);
int i;
for(i=2;i<=r;i++){
if(n%i==0){
return 0;
}
}
return 1;
}
int main(){
int n,i,j,k;
scanf("%d",&n);if(n<2){printf("2\n");return 0;}else{
for(j=n,k=n;j>=2;j--,k++){
            if(isprime(j)||isprime(k)){
                if(isprime(j)){
                    printf("比%d小的素数%d\n",n,j);
                }
                if(isprime(k)){
                    printf("比%d大的素数%d\n",n,k);
                }
                break;
            }
        }
    }
    return 0;
}