HDU 2012 素数判定

素数判定
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 67408    Accepted Submission(s): 23380

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 Input
0 1
0 0
 

Sample Output
OK
 

Author
lcy
 

Source
C语言程序设计练习(二)

 

 

//注意范围(-39<=x<y<=50)是个陷阱,原因看代码:
#include<stdio.h>
#include<string.h>
int a[3010];
int Sushu(int n)//判断n是否为素数的函数
{
    int i;
    if(n==1)
    return 0;
    if(n==2)
    return 1;
    for(i=2;i*i<=n;i++)//根号优化
    {
      if(n%i==0) return 0;
    }
    return 1;
}
int main()
{
    int i,j,n,m,flag;
    memset(a,0,sizeof(a));//数组清零
    for(i=1;i<=3000;i++)//打素数表
    {
    //因为下面是验证i*i+i+41而不是i的,所以要不能打表只到50,要到50*50+50+41=2591,3000即可,这里是个巨坑!
       if(Sushu(i)!=0)
       a[i]=1;
    }
    while(scanf("%d%d",&n,&m)!=EOF)
    {
       if(n==0&&m==0)
       break;
       flag=0;
       for(i=n;i<=m;i++)
       {
         j=i*i+i+41;
         if(j<0)
         j=j*(-1); //注意负数
         if(a[j]==0)
         flag=1;
       }
       if(flag==0)
       printf("OK\n");
       else
       printf("Sorry\n");
    }
    return 0;
}

今天晚上看见一些事,心情不好,就只能做做水题了....

时间: 2025-01-20 21:28:09

HDU 2012 素数判定的相关文章

HDOJ 2012 素数判定

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 Input 0 1 0

c语言-杭电oj2012素数判定 可以运行为什么通不过

问题描述 杭电oj2012素数判定 可以运行为什么通不过 #include "stdio.h" int main() { int x,y,n,j,s; while( scanf("%d%d",&x,&y)!=EOF) { if( x==0 && y==0 ) break; else { for( n=x; n<=y; n++ ) { s=n*n+n+41; for( j=2; j<=s/2; j++ ) { if( s%j

string-java新手 素数判定求解答。

问题描述 java新手 素数判定求解答. 如题,下面是程序.但我不知道为什么在for语句的时候,必须使用divisor<=d/2而divisor<=d就无法执行..这里break是不是跳出整个while循环,还是调回到for.求解.import java.util.Scanner;public class Test{ public static void main(String args[]){ Scanner input = new Scanner(System.in); /*a为素数的个数

素数判定算法的实现_C 语言

1. 素数判定问题 素数判定问题是一个非常常见的问题,本文介绍了常用的几种判定方法. 2. 原始算法 素数的定义是,除了能被1和它本身整除而不能被其他任何数整除的数.根据素数定义 只需要用2到n-1去除n,如果都除不尽,则n是素数,否则,只要其中有一个数能整除则n不是素数. 复制代码 代码如下: bool is_primer1(int num) {     int i;     for(i = 2; i < num; i++) {       if(num % i == 0) {        

杭电ACM 2000-&amp;gt;2099 100道题 详细解题报告出炉

我去年暑假花了5天,把杭电ACM网站上2000到2099这100道题全AC了,又花了10来天精心写解题报告.里面包括题目.解题思路.编程技巧以及参考源码.所有代码都是使用C/C++写的. 最近整理资料时无意间发现,打包成chm文件和大家分享.我已经上传到CSDN上了.下载地址:http://download.csdn.net/source/492194 也可到我的Google Sites上下载. 题号 题名 题号 题名 2000 ASCII码排序 2001 计算两点间的距离 2002 计算球体积

求解素数几种方法

转贴文章请注明:逸学堂   求解一个算法,我们首先要知道它的数学含义.依据这个原则,首先我们要知道什么是素数.; 素数是这样的整数,它除了表示为它自己和1的乘积以外,无论他表示为任何两个整数的乘积. 找素数的方法多种多样. 1:是从2开始用"是则留下,不是则去掉"的方法把所有的数列出来(一直列到你不想再往下列为止,比方说,一直列到10,000).第一个数是2,它是一个素数,所以应当把它留下来,然后继续往下数,每隔一个数删去一个数,这样就能把所有能被2整除.因而不是素数的数都去掉.在留下

【算法编程】基于Miller-Rabin的大素数测试

基本原理: 费尔马小定理:如果p是一个素数,且0<a<p,则a^(p-1)%p=1.       利用费尔马小定理,对于给定的整数n,可以设计素数判定算法,通过计算d=a^(n-1)%n来判断n的素性,当d!=1时,n肯定不是素数,当d=1时,n  很可能是素数. 二次探测定理:如果p是一个素数,且0<x<p,则方程x^2%p=1的解为:x=1或x=p-1.       利用二次探测定理,可以再利用费尔马小定理计算a^(n-1)%n的过程中增加对整数n的二次探测,一旦发现违背二次探

POJ题目分类

初期: 一.基本算法:      (1)枚举. (poj1753,poj2965)      (2)贪心(poj1328,poj2109,poj2586)      (3)递归和分治法.      (4)递推.      (5)构造法.(poj3295)      (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996) 二.图算法:      (1)图的深度优先遍历和广度优先遍历.      (2)最短路径算法(dijkstra,bellman-ford

poj分类

初期: 一.基本算法:      (1)枚举. (poj1753,poj2965)      (2)贪心(poj1328,poj2109,poj2586)      (3)递归和分治法.      (4)递推.      (5)构造法.(poj3295)      (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996) 二.图算法:      (1)图的深度优先遍历和广度优先遍历.      (2)最短路径算法(dijkstra,bellman-ford