王道机试练习——求素数

王道机试练习——求素数

题目描述

题目描述: 给定一个数 n,要求判断其是否为素数( 0,1,负数都是非素数)。
输入: 测试数据有多组,每组输入一个数 n。
输出: 对于每组输入 ,若是素数则输出 yes,否则输入 no。
样例输入:
13
样例输出:
yes

求解素数思路

怎样确定一个数是素数?我们可以用所有大于 1 小于其本身的整数去试着 整除该数,若在该区间内存在某个数能整除该数则该数不是素数;若这些数都不 能整除它,则该数为素数。这一朴素的算法思想时间复杂度为 O(n),n 为我们 要测试的数字。但其实,我们并不用测试到 n-1 为止,我们只需测试到不比 sqrt
(( n) 对 n 开根号)大的整数即可,若到这个整数为止,所有正整数数均不能整 除 n,则可以断定, n 为素数。若 n 不存在大于 sqrt(n)的因数时,该做法显然 正确。若我们假设 n 存在大于等于 sqrt(n)的因数 y,则 z = n / y 必同时为 n 的 因数,且其值小于等于 sqrt(n)(否则 z * y > n )。所以,若 n 存在相异于 1 与其 本身的因数且该因数大于 sqrt(n),则必存在小于或等于 sqrt(n)的因数,所以 我们只需测试到 sqrt(n)为止。这样测试一个数是否是素数的复杂度就降低到了 O(sqrt(n))。

代码

#include<iostream>
#include<algorithm>
using namespace std;
bool judge(int x) {//判断一个数是否为素数
	if (x <= 1) return false;
	int bound = (int)sqrt(x) + 1;
	for (int i = 2; i < bound; i++) {
		if (x % i == 0)return false;
	}
	return true;
}
int main() {
	int x;
	while (cin >> x) {
		puts(judge(x) ? "YES" : "NO");
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值