帮我看看这个程序。素数判定。在杭电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;
} 展开
对于表达式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;
} 展开
展开全部
k=(int)sqrt(m);
这条语句,改成k=(int)sqrt(1.0*m);应该就可以了
因为杭电上的编译器sqrt有两种类型的重载,一种是float 一种是double ,你用的是int,它不知道要调用哪个,所以编译出错,你加个1.0表示这个数是double类型的,double*int 得到的也是double的,所以
系统就知道要调用double的那个sqrt函数了
这条语句,改成k=(int)sqrt(1.0*m);应该就可以了
因为杭电上的编译器sqrt有两种类型的重载,一种是float 一种是double ,你用的是int,它不知道要调用哪个,所以编译出错,你加个1.0表示这个数是double类型的,double*int 得到的也是double的,所以
系统就知道要调用double的那个sqrt函数了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的就难看啦!我的就给你吧!我的叫了!对了的!#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);
}
#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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询