Primes HDU - 2161(基础数论——素数判断)

Primes HDU - 2161(很水的素数判断)

题目描述:

Write a program to read in a list of integers and determine whether or not each number is prime. A number, n, is prime if its only divisors are 1 and n. For this problem, the numbers 1 and 2 are not considered primes.

Input
Each input line contains a single integer. The list of integers is terminated with a number<= 0. You may assume that the input contains at most 250 numbers and each number is less than or equal to 16000.

Output
The output should consists of one line for every number, where each line first lists the problem number, followed by a colon and space, followed by “yes” or “no”.

Sample Input
1
2
3
4
5
17
0

Sample Output
1: no
2: no
3: yes
4: no
5: yes
6: yes

题目大意:

给一些数字(以小于等于0的一个数作为输入结束的标志),判断以上这些数字哪些是素数(1、2不是素数)

分析:

为了减少时间复杂度,不用从2到n进行遍历,采用了开平方的方法减小时间复杂度,由O(n)降到了O(n½)。只需要从2开始遍历到根号n即可,如果其中有能整除的,则它不是素数,否则就是素数。本题需要注意的是输出的格式(一定按照题目要求的格式来,注意还有空格,冒号,以及前面的数字并不是要判断的那个数,只是一个序号!!还有一定别忘了给flag初始化啊!!!!!)

AC代码:

#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
	int a=0,flag=0,count=0;
	while(scanf("%d",&a)!=EOF)
	{
		count++;
		if(a<=0)
		break;
		if(a==1||a==2)
		{
			cout<<count<<": "<<"no"<<endl;
		//	break;
		}
		if(a>2)
		{
			for(int i=2;i<=(int)sqrt(a);i++)//注意一下要强制转化int
			{
				flag=0;//别忘了初始化!!!!!! 
				if(a%i==0)
				{
				cout<<count<<": "<<"no"<<endl;
				flag=1;//说明输出过了 
				break;
				}
				 
			}
			if(flag==0)
			cout<<count<<": "<<"yes"<<endl;
		}
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值