Redraiment猜想

来源:互联网 发布:2k16捏脸数据 科比 编辑:程序博客网 时间:2024/06/05 23:42
Redraiment猜想

                                                            运行时限: 1000 ms   单次运行时限: 1000 ms   内存限制: 64 MB

题目描述

redraiment在家极度无聊,于是找了张纸开始统计素数的个数。
设函数f(n)返回从1->n之间素数的个数。
redraiment发现:

f(1) = 0
f(10) = 4
f(100) = 25
...

满足g(m) = 17 * m2 / 3 - 22 * m / 3 + 5 / 3
其中m为n的位数。
他很激动,是不是自己发现了素数分布的规律了!
请你设计一个程序,求出1->n范围内素数的个数,来验证redraiment是不是正确的,也许还可以得诺贝尔奖呢。^_^


程序输入样例

110651000

1[EOL] 10[EOL] 65[EOL] 100[EOL] 0[EOL] [EOF] 


程序输出样例

041825

个人理解

利用埃氏筛法求出素数个数。


代码AC情况

耗时;73 ms      占用内存:520kb

代码

#include<stdio.h>int X=10;int prime[10000];int is_prime[10001]; int ccc(int n[],int i);int main(){int n[X],a[X],c=0,j=0;while(scanf("%d", &n[c])&&n[c]){a[c]=ccc(n,c);c++;}c--;for(j=0;j<=c;j++){printf("%d\n",a[j]);}return 0;}int ccc(int n[],int c){int p=0,j=2,i=0,k=2;for(i=0;i<=n[c];i++)    is_prime[i]=1;is_prime[0]=is_prime[1] = 0;for( k=2;k<=n[c];k++){if(is_prime[k]){prime[p++]=k;for( j=2*k;j<=n[c];j+=k)     is_prime[j]=0;}}return p;}


原创粉丝点击