帮我看看这个程序。素数判定。在杭电acm提交,显示sqrt:对重载函数的调用不明确。 compilation error。

题目描述对于表达式n^2+n+41,当n在[x,y]范围内取整数值时,判定该表达式的值是否都为素数。输入描述每组输入数据占一行,由两个整数x,y组成,其中(-39<=x<... 题目描述
对于表达式n^2+n+41,当n在[x,y]范围内取整数值时,判定该表达式的值是否都为素数。
输入描述
每组输入数据占一行,由两个整数x,y组成,其中(-39<=x<y<=50)(这个我没写。这个我知道)
输出描述
对于每个给定范围内的取值,如果表达式的值都为素数,则输出"OK",否则请输出“Sorry”,每组输出占一行。
输入样例
0 1 输出样例
OK

#include<stdio.h>
#include<math.h>
int prime(int m)
{ int i,k,prime=1;
if (m==1)
prime=0 ;
k=(int)sqrt(m);
for (i=2; i<=k;i++)
if (m%i==0)
prime=0 ;
return prime ;
}
int main()
{
int x,y,n,count;
count=0;
scanf("%d%d",&x,&y);
for(n=x;n<=y;n++)
if(prime(n*n+n+41)!=0)
count++;
if(count==y-x+1)
printf("ok");
else printf("sorry");
return 0;

}
展开
 我来答
忘至白葬不情必0T
2011-12-18 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:90%
帮助的人:1.2亿
展开全部
看了楼上的回答,对ACM的厌恶又增加了一分,感觉跟实际编程脱节太多了。
其实楼主用不着用sqrt函数,直接for (i=2; i<=m/2;i++) 也行。
s126301
2011-12-17 · TA获得超过995个赞
知道小有建树答主
回答量:566
采纳率:0%
帮助的人:465万
展开全部
k=(int)sqrt(m);
这条语句,改成k=(int)sqrt(1.0*m);应该就可以了
因为杭电上的编译器sqrt有两种类型的重载,一种是float 一种是double ,你用的是int,它不知道要调用哪个,所以编译出错,你加个1.0表示这个数是double类型的,double*int 得到的也是double的,所以
系统就知道要调用double的那个sqrt函数了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
adroitly
2011-12-23 · 超过15用户采纳过TA的回答
知道答主
回答量:59
采纳率:0%
帮助的人:37.6万
展开全部
你的就难看啦!我的就给你吧!我的叫了!对了的!#include<stdio.h>
#include<math.h>
int main()
{
int a,b,c,s,max,min,i,j;
while(scanf("%d%d",&a,&b)!=EOF)
{
if(a==0&&b==0)
break;
else
{
if(a>b)
{max=a;min=b;}
else if(a<b)
{max=b;min=a;}
for(i=min;i<=max;i++)
{
c=0;
s=i*i+i+41;
for(j=2;j<=sqrt(s);j++)
if(s%j==0)
{
printf("Sorry\n");
i=max+1;j=sqrt(s)+1;
c=1;
break;
}
else
c=0;
}
if(c==0)
printf("OK\n");
}
}
return(0);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式