素数 距离问题(nyoj-24)
2018-03-24 21:43
323 查看
素数距离问题
时间限制:3000 ms | 内存限制:65535 KB 难度:2描述 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。如果输入的整数本身就是素数,则输出该素数本身,距离输出0输入第一行给出测试数据组数N(0<N<=10000)
接下来的N行每行有一个整数M(0<M<1000000),输出每行输出两个整数 A B.
其中A表示离相应测试数据最近的素数,B表示其间的距离。样例输入
3 6 8 10样例输出
5 1 7 1 11 1下面是我自己写了用一个函数判断,没有错误,但提交不上,感兴趣的看看就好#include<stdio.h>
int main()
{ int s(int x);
int n;
scanf("%d",&n);
while(n--)
{
int m,a,b,i;
scanf("%d",&m);
if(s(m))
printf("%d 0\n",m);
else
for(i=1;i<m;i++)
{
if(s(m-i))
{
printf("%d %d\n",m-i,i);
break;
}
else if(s(m+i))
{
printf("%d %d\n",m+i,i);
break;
}
}
}
return 0;
}
int s(int x)
{
int i,t=1;
for(i=2;i<x;i++)
{
if(x%i==0)
{
t=0;
break;}
}
return t;
}
下面是最优程序:
#include<iostream> #include<cmath> using namespace std; bool isprime(int n) { for(int k=2;k<=sqrt((double)n);k++) if((n%k)==0) return false; return true; } int main() { int n; cin>>n; while(n--) { int num,i,j; cin>>num; if(num==1) { cout<<"2 1"<<endl; continue; } for(i=num;!isprime(i);i--); for(j=num;!isprime(j);j++); if((num-i)<(j-num)) cout<<i<<' '<<(num-i)<<endl; else if((num-i)>(j-num)) cout<<j<<' '<<(j-num)<<endl; else if((num-i)==(j-num)) cout<<i<<' '<<(num-i)<<endl; } }
相关文章推荐
- NYOJ 24 素数距离问题
- NYOJ 24 素数的距离问题
- Nyoj 24 素数距离问题
- NYOJ-24-素数距离问题-2013年10月12日14:56:23
- NYOJ24-素数距离问题
- NYOJ-24-素数距离问题
- NYOJ 24 素数距离问题
- NYOJ 24 素数距离问题
- NYOJ 24 素数距离问题
- NYOJ-24 素数距离问题
- NYOJ_24 素数距离问题
- NYOJ 24 素数距离问题
- nyoj 24 素数的距离问题
- nyoj_24 素数距离问题
- nyoj 24 素数距离问题
- NYOJ 24 素数距离问题
- NYOJ-24-素数距离问题
- NYoj 24 素数距离问题
- NYOJ-24-素数距离问题
- NYOJ--24--素数距离问题