#include<stdio.h>
#include<math.h>
int main()
{
int n,m,i,j,k;
int left,right,leap=1;
int leftt=0,rightt=0,t=0;
scanf("%d\n",&n);
while(n--)
{
scanf("%d",&m);
/*判断本身是不是素数,如果是输入本身,距离为0*/
/*这里要怎么写,我感觉有问题*/
if(m==2) {break;t=0;}
for(i=2;i<m;i++){
if(m%i==0) {break;leap=0;}
t++;
if(leap==1) {printf("%d",m); printf(" 0");}
}
/*判断在输入这个数字的右边的离他最近的素数*/
/*也由问题*/
for(j=m+1;;j++)
{
leap=1;rightt=0;
for(k=2;k<j;k++)
{
if(j%k==0)
{break;leap=0;}
rightt++;
}
if(leap==1) {right=j;break;}
}
/*但是判断左边的却对了*/
*/左边对了 ,为什么写右边的就错了呢?*/
for(j=m-1;;j--)
{
leap=1;leftt=0;
for(k=2;k<j;k++)
{
if(j%k==0)
{break;leap=0;}
leftt++;
}
if(leap==1){left=j;break;}
}
if(rightt<leftt) printf("%d %d\n",right,abs(rightt-n));
if(rightt>=leftt) printf("%d %d\n",left,abs(leftt-n));
}
}
输入样式
3 /*要测试3组数据*/
6 /*第一组要判读的数字*/
8 /*第二组要判读的数字*/
10 /*第三组要判读的数字*/
输出样式
5 1 /*离输入最近数的素数,距离为1*/ /*如果左右距离相等,输入左边的*/
7 1
11 1
你好像很懂啊?你QQ多少 求教啊
追答就百度hi我吧,我不怎么上qq
追问你说的查表我不太懂,我是新手,你说的这是算法吗?
追答查表不是算法,只是一种方式。例如你有一个prim[10000]的数组,
prim[1] = 0表示1不是素数,
prim[2] = 1 表示2是素数,
prim[3] = 1表示3是素数,
.....
prim[n] = 1 表示n是素数,(或者等于0,表示n不是素数)
你只要把这个数组填充好,然后查找素数就非常简单了,比如查找n是否为素数,就检查prim[n]是否等于1就可以了。
你可以用百度hi我,在浏览器里直接像qq那样聊。
能把C语言程序写出来 让我学习学习 。 写上思路 和备注 谢谢啦
追答可以,但是如果是做acm题目的话不保证通过测评系统,因为测评系统对于程序的执行效率和空间消耗非常严格。
等一下写。
恩恩 我只是想学习学习 这种 思想
追答你等不及了?把最佳给了别人。
追问http://zhidao.baidu.com/question/1732854076276277227.html 去这里给我留
能帮我看下我的问题吗? 就是判断本身是不是?