现在的位置: 首页 > 综合 > 正文

hdu 2138 How many prime numbers(求素数)

2017年07月15日 ⁄ 综合 ⁄ 共 628字 ⁄ 字号 评论关闭

补充素数知识:

第一,对于一个自然数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。

#include<stdio.h>
#include<math.h>
#include <queue>
#include<algorithm>
#include <iostream>
#include <string.h>
using namespace std;

 bool prime(int n)
 {
     int i;
     for(i=2;i<=sqrt(n*1.0);i++)
     {
         if(n%i==0)return 0;
     }
     return 1;
 }

int main()
{
    int t;
    while(~scanf("%d",&t))
    {
        int ans=0;
        while(t--)
        {
            int temp;
            scanf("%d",&temp);
            if(prime(temp))ans++;
        }
        printf("%d\n",ans);
    }
    return 0;
}

抱歉!评论已关闭.