Problem Description:

包含33的素数称为校庆素数。
她想知道在L和R之间(包含L和R)有多少个校庆素数。
比如 2333 就是一个校庆素数。

Input:

输入的第一行包括一个T(T <= 50),代表有T组数据。
每组数据输入两个整数L和R (1<= L <= R <= 500000)。

Output:

对于每组数据,输出"Case #x: y"(不包括引号),其中x代表数据的编号,从1开始,y代表该组数据的结果。

Sample Input:

2
1 233
1 232

Sample Output:

Case #1: 1
Case #2: 0

Hints:
1到233中只有233是校庆素数。

 思路:先将1-500000的所有素数筛出,并在此过程中筛出含‘33’的数,最后在L到R之间计数。

 #include <stdio.h>
 #include <string.h>
 ],ch33[],k=;

 int is33(int l)//筛出包含‘33’的数
 {
     )
     {
         ==);
         l/=;
     }
     ;
 }

 void judge()//判断素数(埃氏筛法)
 {
     long long  i,j;
 memset(ch,-,sizeof(ch));//将ch所有元素初始化为-1
     ;i<=;i++)
         )
         {
             if(is33(i))
                 {
                     ch33[k++]=i;//存入ch33数组
                 }
         ;j+=i)
             ch[j]=;
         }
 }

 int main()
 {
     ,g,a,L,R,i;
     judge();
     while(scanf("%d",&n)!=EOF)
     while(n--)
     {
         s++;
         scanf("%d%d",&L,&R);
         ,a=;g<k;g++)
         {
                 if(ch33[g]>=L&&ch33[g]<=R)a++;
                 if(ch33[g]>R)break;
         }
         printf("Case #%d: %d\n",s,a);
     }
     ;
 }

以下是埃氏筛法的示意图:

原理:

1.  根据算术基本定理(百度):任何一个大于1的自然数 N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积。

2.  先用2筛,筛走不是素数的数(也就是2的倍数),接着用3,5,7……直到最后一位。

3.  被筛走的可以标记,后面就不再用这个数筛。

Tips:

1.sizeof是判断数据类型或者表达式长度符,用于计算有多少个字节。

sizeof(int)==4。

char ch[10]="abc",sizeof(ch)==10*1。

2.strlen是求字符串(仅字符串)长度的函数。char ch[10]="abc",strlen(ch)==3.

3.memset

void *memset(void *s, int ch, sizeof(n));
解释:将s中当前位置后面的n个字节 (typedef unsigned int size_t)用 ch 替换并返回 s 。
对数组操作时只能用于数组的置0或-1,其他值无效。
memset(ch,-1,sizeof(ch))就是将数组ch中所有元素替换为-1,返回ch。

GDUFE-OJ 1359校庆素数 埃氏筛法的更多相关文章

  1. 素数判断-----埃氏筛法&欧拉筛法

    埃氏筛法 /* |埃式筛法| |快速筛选素数| |15-7-26| */ #include <iostream> #include <cstdio> using namespa ...

  2. 埃氏筛法求素数&构造素数表求素数

    埃氏筛法求素数和构造素数表求素数是一个道理. 首先,列出从2开始的所有自然数,构造一个序列: 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1 ...

  3. poj 2689Prime Distance(区间素数)埃氏筛法

    这道题的L和R都很大,所以如果直接开一个1~R的数组明显会超时.但是R-L并不大,所以我们考虑把这个区间(L--R)移动到(1--(R-L+1))这个区间再开数组(就是把每个数减L再加1).接下来先用 ...

  4. [算法]素数筛法(埃氏筛法&线性筛法)

    目录 一.素数筛的定义 二.埃氏筛法(Eratosthenes筛法) 三.线性筛法 四.一个性质 一.素数筛的定义 给定一个整数n,求出[1,n]之间的所有质数(素数),这样的问题为素数筛(素数的筛选 ...

  5. Codeforces Round #270 A. Design Tutorial: Learn from Math【数论/埃氏筛法】

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  6. DP+埃氏筛法 Codeforces Round #304 (Div. 2) D. Soldier and Number Game

    题目传送门 /* 题意:b+1,b+2,...,a 所有数的素数个数和 DP+埃氏筛法:dp[i] 记录i的素数个数和,若i是素数,则为1:否则它可以从一个数乘以素数递推过来 最后改为i之前所有素数个 ...

  7. 埃氏筛法(快速筛选n以内素数的个数)

    给你一个数n,请问n以内有多少个素数?(n <= 10e7) 一般来说,要是对一个整数进行素数判断,首先想到的是写个函数判断是否为素数,然后调用这个函数,时间复杂度为O(n^(½)),但是要求n ...

  8. 埃氏筛法(求n以内有哪些个质数)

    核心思想:从i=2开始,划去i的倍数,即剩下i为质数(如删去2的倍数后2为质数,再删去3的倍数后3为质数,4被删除则跳过,5未被删除则记录然后删除5的倍数...以此类推) #include <b ...

  9. 埃氏筛法(求n以内有多少个素数)

    题目大意:给定整数n,请问n以内有多少个素数 思路:想必要判断一个数是否是素数,大家都会了,并且可以在O(根号n)的复杂度求出答案,那么求n以内的素数呢,那样求就显得有点复杂了,下面看一下这里介绍的

随机推荐

  1. andriod逆向实验截图

  2. LeetCode Minimum Moves to Equal Array Elements II

    原题链接在这里:https://leetcode.com/problems/minimum-moves-to-equal-array-elements-ii/ 题目: Given a non-empt ...

  3. CSS样式常用属性整理

    web工程师是最近5年刚刚兴起的一门高薪职业,人们的专注度越来越高. 那么前端除了学习html标签之外还需要掌握什么知识点呢? 为大家整理了一个和HTML标签密不可分的知识要点--<CSS样式常 ...

  4. C# 与数据库中字段类型 Int16(short), Int32(int), Int64(long)的取值范围、区别 。string长度

    一开始看到Int16, Int32, Int64这三种类型就觉得有点怪, 为什么要整个数字结尾的, 挺怪的. 昨天互相想到, ms这么干就是想让大家一眼就知道这个数据类型占多大空间吧. Int8, 等 ...

  5. could not deduce template argument for 'const std::_Tree<_Traits> &' from 'const std::string'

    VS2008, 写一个简单的demo的时候出现了这个: 1>------ Build started: Project: GetExportTable, Configuration: Relea ...

  6. 在github分支上上传空文件夹

    GIT工具是依靠文件来识别文件夹的,对于空的文件夹是不能识别的.因此如果需要在代码中增加一个空文件夹,同时需要在文件夹中增加一个空文件.gitkeep 当批量增加空文件夹时,可以在GIT库的根目录下输 ...

  7. servlet内置对象

    request                请求对象       类型javax.servlet.ServletRequest   作用域Request response              ...

  8. JSP中动态INCLUDE与静态INCLUDE的区别

    动态INCLUDE 用法: <jsp:include page="included.jsp" flush="true" /> 说明: 它总是会检查所 ...

  9. paper 120:计算距离矩阵的函数的pdist和pdist2函数

    matlab中自带的计算距离矩阵的函数有两个pdist和pdist2.前者计算一个向量自身的距离矩阵,后者计算两个向量之间的距离矩阵.基本调用形式如下: D = pdist(X) D = pdist2 ...

  10. ERROR 1130: Host 'XXXXXXX' is not allowed to connect to this MySQL server

    解决方法:1. 改表法.可能是你的帐号不允许从远程登陆,只能在localhost.这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 & ...