51nod 1106 质数检测
来源:互联网 发布:淘宝订单导出不一样 编辑:程序博客网 时间:2024/06/05 08:25
传送门:1106 质数检测
解题思路
根据质数的定义,在判断一个数n是否是质数时,我们只要用1至n-1去除n,看看能否整除即可。但我们有更好的办法。先找一个数m,使m的平方大于n,再用<=m的质数去除n(n即为被除数),如果都不能整除,则n必然是质数
。如我们要判断1993是不是质数,50*50>1993,那么我们只要用1993除以<50的质数看是否能整除,若不能即为质数.
AC代码
#include<stdio.h>#include<string.h>#include<algorithm>#include<math.h>using namespace std;const long long MAXN = 1e5+5;bool visit[MAXN+5];long long prime[200055];int num ; //区间内素数的个数void init_prim(){ memset(visit, true, sizeof(visit)); for (int i = 2; i <= MAXN; ++i) { if (visit[i] == true) { num++; prime[num] = i; } for (int j = 1; ((j <= num) && (i * prime[j] <= MAXN)); ++j) { visit[i * prime[j]] = false; if (i % prime[j] == 0) break; //点睛之笔 } }}int main(){ init_prim(); int t; scanf("%d",&t); while(t--) { long long n; scanf("%lld",&n); int tmp = sqrt(n)+1; int p=lower_bound(prime,prime+num,tmp)-prime; bool flag = false; for(int i=1;i<=p;i++) { if(!(n%prime[i]) && n!=2) { flag = true; break; } } if(!flag) printf("Yes\n"); else printf("No\n"); } return 0;}
0 0
- 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-1106-质数检测
- 【51nod】1106 质数检测 埃拉托斯特尼筛法
- 51nod-1186 质数检测
- 20140915 【 数论 - Miller_Rabin素数测试 】 51nod 1106 . 质数检测
- 【机器学习】线性回归的梯度下降法 续
- 死锁的产生原因&&产生的必要条件&&处理方法
- Android进程间通信-AIDL的简单使用
- [图像] 标注二值图像中的不同物体
- BestCoder 2nd Anniversary Oracle
- 51nod 1106 质数检测
- luogu2038[NOIP2014 T4]无线网络发射器选址
- Error: Failed to load plugin angular: Cannot find module 'eslint-plugin-angular'
- 在redhat linux中实用vi编辑器出现乱码解决方法
- C++ - PAT - L1-031. 到底是不是太胖了(天梯赛决赛题目)
- plsql 安装后database下拉没有东西
- linux中jdk配置问题
- 走遍世界 —— 总论
- 313. Super Ugly Number