首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【杭电oj】2138 - How many prime numbers(判断素数新方法)

【杭电oj】2138 - How many prime numbers(判断素数新方法)

作者头像
FishWang
发布2025-08-26 17:30:14
发布2025-08-26 17:30:14
11800
代码可运行
举报
运行总次数:0
代码可运行

How many prime numbers

Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 14851 Accepted Submission(s): 5143

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

代码语言:javascript
代码运行次数:0
运行
复制
   3
2 3 4

Sample Output

代码语言:javascript
代码运行次数:0
运行
复制
   2

Author

wangye

Source

HDU 2007-11 Programming Contest_WarmUp

判断素数的题要说已经做过很多了,以前都是用打表的方法,这道题因为要求输入的数在int范围内,打表不能做。

第一种方法很普通,就是判断2到跟号n是否有n的约数,很好理解。

代码如下:

代码语言:javascript
代码运行次数:0
运行
复制
#include <stdio.h>
#include <math.h>
bool prime(int t)
{
	if (t==2 || t==3 || t==5)
		return true;
	if (t<2)
		return false;
	for (int i=2;i<=sqrt((double)t);i++)
	{
		if (!(t%i))
			return false;
	}
	return true;
}
int main()
{
	int ans;
	int n;
	int t;
	while (~scanf ("%d",&n))
	{
		ans=0;
		while (n--)
		{
			scanf ("%d",&t);
			if (prime(t))
				ans++;
		}
		printf ("%d\n",ans);
	}
	return 0;
}

下面的方法是在网上找到,个人觉得更好,如果理解了将会比上面的省时间,我为了方便自己理解,加了详细的注释,贴出学习学习:

代码语言:javascript
代码运行次数:0
运行
复制
#include <stdio.h>
#include <math.h>
int base[8]={4,2,4,2,4,6,2,6};
//							分析: 
//7		11 13 17 19 23 29 31 37		41 43 47 49 53 59 61 67
// 		 4  2  4  2  4  6  2  6		 4  2  4  2  4  6  2  6   
//		从7开始算加法,依次加42424626,可以得到所有质数

int prime(int t)
{
	if (t<2)		//0,1为非素数 
		return 0;
	if (t==2 || t==3 || t==5)		//对小于7的素数单独判断 
		return 1;
	if (!(t%2 && t%3 && t%5))		//被2、3、5的倍数不为素数 
		return 0;
	//注意上述判断的先后顺序
	 
	int n=7;		//从7开始加 
	for (;n<=sqrt(double(t));)
	{
		for (int i=0;i<8;i++)		//从7开始列出素数判断 
		{
			if (t%n==0)
				return 0;
			n+=base[i];
		}
		if (t%n==0)		//之前少判断一次,所以单独判断 
			return 0;
	}
	return 1;		//如果上述判断都通过,则为素数 
}
int main()
{
	int ans;
	int n;
	int t;
	while (~scanf ("%d",&n))
	{
		ans=0;
		while (n--)
		{
			scanf ("%d",&t);
			if (prime(t))
				ans++;
		}
		printf ("%d\n",ans);
	}
	return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-08-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • How many prime numbers
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档