zoukankan      html  css  js  c++  java
  • 蓝桥杯 算法提高 找素数

    题目如下:

    问题描述
      给定区间[L, R] , 请计算区间中素数的个数。
    输入格式
      两个数L和R。
    输出格式
      一行,区间中素数的个数。
    样例输入
    2 11
    样例输出
    5
    数据规模和约定
      2 <= L <= R <= 2147483647 R-L <= 1000000
    ---------分割线---------
      这题懂筛法的人看程序应该很容易。我自己当时有点思路但是不知道怎么下手,还是看别人的blog才懂的,首先从2到sqrt(R)中找素数,然后在L到R中筛出合数,具体看代码吧。
    #include<stdio.h>
    #include<math.h>
    #define ll long long int
    int t[1000001];
    int vis[1000001];
    int sum=0;
    void f(ll a, ll b) 
    {
        ll i,j;
        for(i=2;i*i<b;i++)
        {
            if(!vis[i]) 
            {
                for(j=2*i;j*j<b;j+=i) 
                    vis[j]=1;
                for(j=(2>(a+i-1)/i?2:(a+i-1)/i)*i;j<b;j+=i)//这里看不懂的好好思索下,自己多调试调试就明白了
                    t[j-a]=1;
            }
        }
    }
    int main()
    { 
        ll i,a,b;
        scanf("%I64d%I64d", &a, &b);
        f(a,b+1);
        for(i=a;i<=b;i++)
            if(!t[i-a]) 
                sum++;
        printf("%d
    ",sum);
        return 0;
    }
  • 相关阅读:
    向eureka注册正确的ip地址
    sleuth + zipkin 链路分析
    Yii2的整体结构概览
    Redis实现消息队列
    Redis使用场景梳理
    redis基础知识
    TCP服务
    数据结构-队列
    看见
    线性表的链式存储结构
  • 原文地址:https://www.cnblogs.com/search-the-universe/p/last_month_1.html
Copyright © 2011-2022 走看看