从键盘输入一个整数,输出距离该数最近的素数。根据输入的数不同,此问题可能有一个答案(或者比输入的数大或者比输入的数小),也可能需要输出两个值(一个比输入的数大,一个比输入的数小,两个距离输入的数一样近)。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;
}