又见素数

来源:互联网 发布:java 文件名 问号 编辑:程序博客网 时间:2024/05/16 12:55

                                                           又见素数

题目描述

给定一个正整数n(n <= 10000000),求n(包含)以内素数的个数。

输入

第一行为一个整数t(t <= 1000),表示测试数据的组数。 接下来有t行,每行一个整数n。

输出

对于每个n,求n以内素数的个数。

样例输入

2510

样例输出

34

思路:

         以打表的形式来减少时间,一开始未用数组将素数的个数储存起来,直接每输入一个m就for一次枚举出来,结果超时了。之后再定义一个数组b【T】将素数个数存储起来,结果内存超限快哭了。后来直接用回原来的a【T】数组后就AC了大笑
#include<iostream>#include <cmath>using namespace std;const int T = 10000001;int a[T];int main(){    int i, j,n,m,sum;    for (i = 2; i <= sqrt(T);++i)    {        if (a[i]!=1)        {            for (j = i+i; j <= T;j+=i )            {                a[j] = 1;            }        }    }    for (i = 2,sum=0; i <= T; ++i)    {        if (a[i]!=1)        {            sum++;        }        a[i] = sum;    }    scanf("%d",&n);    while (n--)    {        scanf("%d", &m);        printf("%d\n", a[m]);    }    return 0;}



0 0
原创粉丝点击