SunKai's Blog

I'm an OIer,I want to achieve my dream

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  22 随笔 :: 0 文章 :: 23 评论 :: 0 Trackbacks
/*
 
习题69:数素数★★
题目描述:
素数是的只能被1和它本身整除的自然数。
判断一个数是素数的方法是使用2到小于该数的数除它,
若有能整除的则该数不是素数。

输入:
多组测试数据,每组一行,每行是两个整数m,n(1<= m,n <=4000000),
遇到EOF标志结束程序

输出:
输出一个整数,表示介于m,n之间(包括m,n)的素数的数量

样例输入:
5 10
1 3
6 8

样例输出:
2
2
1

提示:
虽然内存限制有64M大小,但也要节约空间~~

难度:Easy
*/
#include<stdio.h>
#include<math.h>
int S[2000]={
0,309,255,237,227,226,215,212,219,210,202,205,208,193,206,190,198,204,192,190,190,
207,183,180,193,188,193,184,198,189,176,184,179,192,172,189,186,184,184,175,185,
178,176,185,179,172,188,184,168,179,187,166,180,173,175,175,172,175,175,175,183,
175,171,179,172,174,164,188,164,184,164,163,179,176,175,177,168,170,165,173,164,
168,167,161,175,173,160,170,184,162,171,179,163,168,169,167,168,173,161,167,162,
168,175,179,156,168,157,171,168,167,167,163,173,173,157,161,152,169,168,168,168,
164,172,165,162,167,153,167,155,168,164,177,163,169,151,170,156,159,174,161,161,
147,173,161,153,161,151,167,162,176,164,153,158,164,160,170,173,164,161,166,166,
161,162,163,156,167,149,162,161,160,164,162,162,165,163,152,157,159,159,162,162,
146,148,159,171,151,160,154,163,161,151,168,172,163,149,160,154,150,151,152,165,
162,150,169,153,168,150,162,158,154,163,161,164,170,146,155,162,171,153,141,166,
157,143,162,149,148,150,161,153,171,160,153,163,165,157,159,156,142,152,166,159,
152,167,155,162,155,143,166,149,156,157,151,149,174,154,164,153,158,155,157,151,
153,155,155,148,156,152,148,157,158,151,160,154,144,168,150,143,151,155,163,156,
151,162,154,156,158,149,174,148,142,158,160,154,147,157,156,155,150,159,159,148,
160,160,148,152,153,143,144,147,160,157,154,136,152,146,161,151,154,152,153,160,
143,149,164,144,167,146,145,153,161,148,144,164,159,147,153,157,153,144,153,155,
155,144,152,156,157,164,151,154,139,159,138,150,157,164,150,153,145,154,156,148,
156,148,151,128,147,156,148,152,160,138,159,158,149,159,150,155,155,152,142,150,
151,161,146,152,154,147,155,158,147,157,156,142,145,152,142,160,146,150,153,138,
163,157,158,152,141,151,163,137,149,148,146,153,146,151,147,153,141,148,157,147,
155,151,156,152,156,148,136,161,142,159,149,148,153,152,138,155,150,148,152,140,
144,153,152,165,152,139,137,148,155,146,156,162,143,151,137,150,156,143,145,158,
146,145,142,146,152,144,148,135,145,158,154,150,144,143,164,143,148,143,134,146,
147,158,131,154,144,142,159,146,153,156,145,149,167,138,151,148,151,150,152,145,
153,145,152,129,159,147,147,135,155,150,143,145,149,140,146,144,149,141,132,158,
142,152,149,145,152,149,140,166,144,142,142,146,149,149,160,146,142,147,149,157,
146,154,153,151,145,153,127,156,139,140,148,153,150,154,150,136,144,144,143,144,
139,157,144,145,153,155,142,171,149,143,146,145,139,145,150,160,155,147,154,145,
151,144,153,140,146,143,142,145,134,139,135,156,157,141,155,141,141,142,155,138,
142,149,130,136,153,147,139,153,146,157,144,133,159,144,151,144,150,147,151,148,
151,149,132,141,150,141,147,147,158,146,134,144,140,148,143,147,147,141,142,151,
143,137,143,152,134,168,143,147,137,132,153,137,147,149,147,154,138,141,132,150,
142,148,144,144,148,147,139,144,152,140,138,151,157,151,147,129,153,142,139,140,
149,156,163,146,137,138,136,148,148,154,123,130,142,145,140,150,156,136,154,148,
159,141,149,143,139,142,152,141,139,149,160,135,140,152,147,148,128,147,141,147,
128,157,154,142,150,137,140,157,146,153,140,133,146,144,162,148,143,149,144,137,
147,142,138,142,148,134,143,133,137,147,146,143,147,131,142,149,147,137,146,148,
143,152,132,141,146,139,140,155,140,145,133,147,135,146,132,144,145,134,150,136,
142,144,160,149,143,134,152,127,146,135,151,144,140,146,154,143,142,156,147,131,
130,136,148,148,137,150,128,154,152,137,138,146,127,153,154,150,133,149,145,155,
142,133,137,142,135,146,146,137,147,154,152,131,141,143,144,140,136,145,137,150,
140,127,148,145,136,141,141,139,140,154,134,141,145,146,158,152,137,136,136,124,
134,144,143,147,143,130,154,136,155,145,146,139,143,126,151,145,148,132,156,141,
131,152,145,150,141,136,149,130,139,139,154,149,148,142,146,146,123,131,138,153,
143,138,150,130,145,156,145,147,140,145,150,144,141,142,136,139,146,138,153,133,
145,143,145,141,152,138,137,140,132,138,137,148,145,148,143,148,143,136,133,142,
154,148,140,142,139,135,145,150,142,141,150,131,139,140,154,131,135,150,135,140,
132,130,134,138,128,148,151,139,152,132,147,136,142,143,150,151,135,142,141,141,
156,139,137,156,137,142,140,147,127,145,147,138,155,140,138,132,138,151,133,137,
134,140,140,132,156,145,134,151,136,139,148,140,134,133,136,149,129,137,149,150,
132,145,131,139,139,149,140,141,149,138,140,135,146,144,136,131,143,139,144,155,
129,141,133,150,137,145,144,146,134,133,145,140,148,154,146,139,136,129,146,138,
146,132,148,142,133,128,148,138,145,140,140,140,140,123,140,137,143,147,142,143,
135,132,137,132,132,145,139,158,140,134,145,148,132,135,137,135,151,144,122,135,
146,154,147,146,127,151,142,145,146,151,147,128,144,132,122,137,144,136,143,140,
139,135,145,153,133,130,142,147,141,130,133,133,138,138,137,134,151,126,137,146,
141,137,140,140,136,126,145,141,131,144,131,150,135,146,148,137,142,130,149,120,
144,138,148,141,128,155,147,139,133,126,153,148,124,147,134,135,128,140,151,139,
146,134,152,123,145,139,131,134,143,135,130,151,130,146,137,143,136,158,131,134,
145,144,133,150,129,130,145,138,131,141,137,138,133,145,153,131,134,138,138,143,
132,150,140,141,136,134,146,139,131,133,141,138,160,140,133,151,140,135,126,147,
127,134,143,128,150,124,148,146,129,139,150,139,125,147,132,147,136,147,152,129,
157,142,132,142,139,133,138,144,139,137,133,136,130,135,141,141,143,148,134,126,
144,138,132,132,156,156,120,140,128,150,137,152,132,141,145,129,146,147,138,134,
139,143,133,122,137,136,148,127,145,133,139,139,143,147,134,144,138,139,143,127,
150,138,142,137,140,143,141,155,118,142,128,125,144,141,130,127,130,147,142,141,
132,144,126,143,131,135,138,141,147,135,141,142,128,139,145,130,137,137,136,147,
139,127,127,149,136,131,145,140,145,146,126,158,145,150,131,142,141,145,143,135,
116,143,141,154,139,151,135,133,141,121,153,139,133,138,127,140,132,140,134,150,
135,131,137,136,132,128,142,136,139,135,141,139,132,130,134,142,138,133,143,141,
144,126,140,134,135,151,132,142,140,126,139,135,130,146,147,135,119,141,131,136,
146,141,128,124,130,143,149,141,143,135,138,134,134,133,138,147,141,145,131,126,
139,143,135,149,133,132,154,128,139,133,154,131,127,138,130,134,133,142,142,129,
137,138,119,144,131,147,137,138,128,131,144,132,132,141,136,134,124,137,143,148,
138,145,140,139,141,129,143,144,146,138,138,140,121,124,135,147,138,144,137,128,
139,144,150,132,137,133,130,141,150,126,139,128,137,134,134,137,133,138,145,145,
135,147,127,122,139,149,138,132,150,138,130,137,120,148,148,131,139,143,139,139,
138,140,147,149,131,139,139,140,138,138,142,136,136,135,138,130,148,129,144,142,
143,139,131,129,133,144,130,136,133,134,137,145,139,130,146,136,134,129,136,146,
156,119,129,142,136,138,139,137,125,140,138,117,135,137,140,146,133,140,139,134,
130,131,133,152,133,142,128,132,127,139,136,152,131,130,138,138,129,134,128,124,
131,126,139,152,142,147,126,133,139,147,131,132,142,137,140,136,129,137,147,127,
136,148,137,131,143,147,137,134,138,126,140,133,137,143,128,143,144,135,145,140,
133,145,135,132,149,117,140,132,135,125,132,130,135,141,125,141,134,121,130,142,
121,128,133,129,141,140,135,124,145,118,151,141,120,132,149,136,135,122,139,133,
130,124,135,127,146,135,139,123,129,136,131,143,139,126,136,137,136,139,133,137,
141,135,141,141,125,125,136,134,137,135,132,152,129,123,134,144,142,133,143,133,
141,148,147,137,144,134,142,125,158,138,135,135,142,137,128,129,131,135,132,134,
135,126,121,127,132,152,131,125,142,141,126,144,137,140,140,152,144,123,130,135,
134,131,150,130,148,132,137,141,139,123,142,120,145,137,134,139,142,129,146,146,
140,141,140,127,142,132,123,140,124,132,144,147,140,126,139,135,114,123,136,139,
134,122,136,133,143,138,139,131,144,126,126,141,118,139,145,132,134,149,127,122,
156,127,145,143,138,137,146,136,119,144,139,127,132,137,132,148,131,135,134,143,
128,137,128,136,142,134,128,125,143,129,123,143,129,134,140,132,130,144,128,143,
147,142,135,134,127,127,133,138,142,143,126,133,130,143,126,136,144,140,141,138,
129,131,137,138,131,144,135,139,141,136,117,136,133,130,132,136,116,135,139,134,
144,139,142,124,131,123,136,129,120,149,130,119,139};
int m=0;
int n1,n2;
int i,k;
void sumx(int n1,int n2)
{
     for(i=n1;i<n2;i++)
     {
       m++;
       for(k=2;k<=sqrt(i);k++)
       if(i%k==0)
       {
         m--;
         break;
       }
     }
}
int main(void)
{
  while(scanf("%ld%ld",&n1,&n2)!=EOF)
  {
    m=0;
    if(n1>n2) n1^=n2^=n1^=n2;
    if(n1>>11!=n2>>11)
    {
      for(i=(n1>>11)+2;i<=n2>>11;i++) m+=S[i];
      sumx(n1,((n1>>11)+1)<<11);
      sumx((n2>>11)<<11,n2+1);
    }
    else
      sumx(n1,n2+1);
    if(n1==1) m--;
    printf("%ld\n",m);
  }
  return 0;
}
posted on 2008-04-04 11:10 SunKai 阅读(629) 评论(1)  编辑 收藏 引用 所属分类: 算法习题/题解

评论

# re: 习题69:数素数★★ 2008-04-09 14:34 -.-:
汗...你为什么不用筛法呢....  回复  更多评论
  


标题  
姓名  
主页
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]
相关链接:
网站导航: