HDU 2012 素数的判定
2015-07-28 10:50
344 查看
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
Sample Output
质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数(质数)整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数。
改进算法:
n不是素数,则n可表示为a*b,其中2<=a<=b<=n-1,则a,b中必有一个数满足:1<x<=sqrt(n),因而,只需要用2~sqrt(n)去除n,这样就得到一个复杂度为O(sqrt(n))的算法
筛选法:
这种方法主要用于打素数表,如求出n之内的所有素数,其思路是从1开始遇到一个素数就标记一下,并去掉n之内的大于它的所有倍数,直循环到n:
对于表达式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
#include <stdio.h> int main() { int x, y, i, j, n, sum; while (scanf("%d %d", &x, &y) != EOF) { if ( x != 0 || y != 0) { n = 0; for (i = x; i <= y; i++) { j = 2; sum = i * i + i + 41; while ( sum % j != 0 && j <= sum - 1) j++; if (j == sum) n++; } if (n == y - x + 1) printf("OK\n"); else printf("Sorry\n"); } else break; } return 0; }
质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数(质数)整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数。
改进算法:
n不是素数,则n可表示为a*b,其中2<=a<=b<=n-1,则a,b中必有一个数满足:1<x<=sqrt(n),因而,只需要用2~sqrt(n)去除n,这样就得到一个复杂度为O(sqrt(n))的算法
bool is_primer(int num) { int mid = sqrt(num); for (int i = 2; i <= mid; i++) { if (num % i == 0) return false; } return true; }
筛选法:
这种方法主要用于打素数表,如求出n之内的所有素数,其思路是从1开始遇到一个素数就标记一下,并去掉n之内的大于它的所有倍数,直循环到n:
#include <stdio.h> int main() { int p[100000], q[100000], n, t = 0; scanf("%d", &n); p[1] = 0; for (int i = 2; i <= n; i++) p[i] = 1; for (int i = 2; i <= n; i++) if (p[i]) { q[t++] = i; for (int j = i + i; j <= n; j += i) p[j] = 0; } for (int i = 0; i < t; i++) printf("%d%c", q[i], i<t-1?' ':'\n'); return 0; }
相关文章推荐
- hdoj 2043密码
- 代码大全2-三思而后行:前期准备
- JSON.stringify 语法实例讲解
- leetCode 96.Unique Binary Search Trees (唯一二叉搜索树) 解题思路和方法
- Linux网络编程select模型的实现
- ADB not responding
- C++易vector
- sublime text 3 快捷键大全以及配置编译环境
- UVA 10061 How many zeros and how many digits?
- 模版小结2
- MFC中获得对话框控件相对于父窗口的位置
- 求约数 hdu2601 An easy problem
- Highcharts帮助文档和实际代码不一致
- 暑假- Trie树-(D - Phone List)
- Android Volley完全解析(一),初识Volley的基本用法
- Matlab--多项式
- 讲解如何在Unity的Inspector面板实现类似摄像机层次遮罩的多选效果
- Swift学习记录(Swift和Object-C混编之可选值类型的选择)
- 如何创建你自己的 Git 服务器
- ORACLE大表中删除部分数据最佳方案