(hdu step 2.1.2)How many prime numbers(判断一个数是否是质数)

题目:

       

How many prime numbers

Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 8513 Accepted Submission(s): 2716
 
Problem Description
Give you a lot of positive integers, just to find out how many prime numbers there are.
 
Input
There are a lot of cases. In each case, there is an integer N representing the number of integers to find. Each integer won’t exceed 32-bit signed integer, and each of them won’t be less than 2.
 
Output

            For each case, print the number of prime numbers you have found out.
 
Sample Input
3
2 3 4
 
Sample Output
2
 
Author
wangye
 
Source
HDU 2007-11 Programming Contest_WarmUp
 
Recommend
威士忌

题目分析:

              判断一个数是否是素数。这道题可以用很多种方法做:定义法、欧拉筛法、埃拉托尼斯筛法来做。本题使用

定义法来做。


关于素数的一些知识点:

第一,对于一个自然数N,只要能被一个非1非自身的数整除,它就肯定不是素数,所以不
必再用其他的数去除。
第二,对于N来说,只需用小于N的素数去除就可以了。例如,如果N能被15整除,实际
上就能被3和5整除,如果N不能被3和5整除,那么N也决不会被15整除。
第三,对于N来说,不必用从2到N-1的所有素数去除,只需用小于等于√N(根号N)的所有素数去除就可以了。这一点可以用反证法来证明:
如果N是合数,则一定存在大于1小于N的整数d1和d2,使得N=d1×d2。
如果d1和d2均大于√N,则有:N=d1×d2>√N×√N=N。
而这是不可能的,所以,d1和d2中必有一个小于或等于√N。


代码如下:

/*
 * b.cpp
 *
 *  Created on: 2015年1月30日
 *      Author: Administrator
 */

#include <iostream>
#include <cstdio>
#include <cmath>



using namespace std;

/**
 * 判断一个数是否是质数(素数)
 */
bool isPrime(int n){
	if(n == 1 || n == 0){//0和1既不是合数也不是素数
		return false;
	}

	int i;
	for(i = 2 ; i <= sqrt(n*1.0) ; ++i){//判断一个数是否是素数只需要到<=根号n即可.这道题如果上界取到n会TLE
		if(n%i == 0){//如果它能整出其中一个因子
			return false;//则表明他不是素数
		}
	}

	return true;
}

int main(){
	int n;
	while(scanf("%d",&n)!=EOF){
		int ans = 0;
		int i;
		for(i = 0 ; i < n ; ++i){
			int temp;
			scanf("%d",&temp);
			if(isPrime(temp) == true){
				ans++;
			}
		}

		printf("%d\n",ans);
	}

	return 0;
}







  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帅气的东哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值