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;
}