51Nod-1106-质数检测
来源:互联网 发布:Python程序sleep 编辑:程序博客网 时间:2024/06/10 22:56
给出N个正整数,检测每个数是否为质数。如果是,输出”Yes”,否则输出”No”。
Input
第1行:一个数N,表示正整数的数量。(1 <= N <= 1000)
第2 - N + 1行:每行1个数(2 <= S[i] <= 10^9)
Output
输出共N行,每行为 Yes 或 No。
Input示例
5
2
3
4
5
6
Output示例
Yes
Yes
No
Yes
No
遇见这道题,我第一感觉又是个坑,不搞些小手段一定会超时,但是怎么才能不超时呢?传统的因子检测法是肯定行不通的,结果一查吓我一跳,又是费马检测,又是AKS质数测试,一堆看得不是太懂的概念性东西,充斥着荧屏,硬着头皮看了一天也只是懵懵懂懂,然后我再一次念叨那句话,作为一个程序员,如果你给我数学公式的话,那还不如给我代码去学习。
于是我就上网找到了一个不错的代码,仔细一看,这个代码并没有用上边说的那两个特别复杂的检测思路,而是利用了传统的因子检测,但是它优化了很多,利用质因子检测的原理,成功的节省了大量的时间,效率有显著的提升,鉴于个人能力有限(数学真的挂了),我暂时先用这种质因数的检测来AC吧,毕竟舍本逐末的事太消耗时间,还不一定能够弄透彻……
#include <stdio.h>#define _MAX 5000int a[_MAX + 1] = {1,1};int p[_MAX + 1];int main(){ int num = 0; for(int i = 2; i <= _MAX; i++) { if(!a[i]) p[num++] = i; for(int j = 0; j < num && i * p[j] <= _MAX; j++) { a[i * p[j]] = 1; if(!(i % p[j])) break; } } int t, n; scanf("%d", &t); while(t--) { scanf("%d", &n); if(n <= _MAX) { if(!a[n]) { printf("Yes\n"); } else { printf("No\n"); } } else { int ok = 1; for(int i = 0; i < num; i++) { if(n % p[i] == 0) { ok = 0; } } if(ok) { printf("Yes\n"); } else { printf("No\n"); } } } return 0;}
OVER!!!很多时候,必须承认自己是弱鸡。
0 0
- 51Nod-1106-质数检测
- 51nod 1106 质数检测
- 51nod 1106 质数检测
- 51nod-1106质数检测
- 51nod 1106 质数检测
- 51nod-【1106 质数检测】
- 51NOD 1106质数检测
- 51Nod 1106 质数检测
- 【51Nod】1106 质数检测
- 51Nod-1106-质数检测
- 51Nod 1106 质数检测
- 51Nod-1106 质数检测
- 51 Nod 1106 质数检测
- 51nod 1106 质数检测
- 【51nod】1106 质数检测
- 51Nod-1186-质数检测 V2
- 【51nod】1106 质数检测 埃拉托斯特尼筛法
- 51nod-1186 质数检测
- Ubuntu 14.04安装+运行GreenOpenERP
- eclipse启动动画自动消失并且没有反应开启失败的解决方法
- C++ enum实例
- 1.基本概念
- C语言实现栈(数组)
- 51Nod-1106-质数检测
- Zookeeper实战-集群环境搭建
- windows下python开发环境搭建(python+pip+aptana studio)
- Genymotion打开失败或者Oracle VM VirtualBox解决方案
- [汇编学习笔记][第十三章int指令]
- Android学习 -- 《AndroidManifest》
- Activity的四种启动模式详解
- 二叉树创建---.h头文件 类声明(无模板)
- php的总结