杭电 oj 2012 素数判定 C++

Problem Description 对于表达式n^2+n+41,当n在(x,y)范围内取整数值时(包括x,y)(-39<=x<y<=50),判定该表达式的值是否都为素数。
Input 输入数据有多组,每组占一行,由两个整数x,y组成,当x=0,y=0时,表示输入结束,该行不做处理。
Output 对于每个给定范围内的取值,如果表达式的值都为素数,则输出"OK",否则请输出“Sorry”,每组输出占一行。

Sample Input0 1
0 0
Sample OutputOK

#include"iostream" 
#include"cmath"
using namespace std;
int main()
{
 int x,y,k,a[50],b,c,d,e,j;
 while(cin>>x>>y)
 { if(x==0&&y==0)
  break;
  c=0;
  d=y-x+1;
  for(int i=0;i<d;i++,x++)
  a[i]=x;
   for(int i=0;i<d;i++)
   {
    e=a[i]*a[i]+a[i]+41;
    k=(int)sqrt( (double)e );//求平方根,注意sqrt()的参数为 double 类型,这里要强制转换e的类型
      for(j=2;j<=k;j++)
         if(e%j==0)
            break;//如果完成所有循环,那么e为素数
      if(j>k)//最后一次循环,会执行j++,此时 j=k+1,所以有j>k 
      c++;
   }
  if(c==d)
     cout<<"OK"<<endl;
     else
     cout<<"Sorry"<<endl;
 }
return 0;
}
发布了23 篇原创文章 · 获赞 8 · 访问量 436

猜你喜欢

转载自blog.csdn.net/qq_45697900/article/details/104753552