freemandj 2021-04-10 18:08 采纳率: 100%
浏览 32
已采纳

[蓝桥杯][算法提高VIP]找素数【多次提交答案一致不通过,求助帮忙改动】

算法提高 找素数

Description

 

给定区间[L, R] , 请计算区间中素数的个数。

Input

 

输入描述:

两个数L和R。

输入样例:

2 11

Output

 

输出描述:

一行,区间中素数的个数。

输出样例:

5

Sample Input 1

参考上文 

Sample Output 1

参考上文

Hint

HINT:时间限制:1.0s 内存限制:256.0MB

2 <= L <= R <= 2147483647 R-L <= 1000000

Source

蓝桥杯练习系统 ID: 267 原题链接: http://lx.lanqiao.cn/problem.page?gpid=T267

 

 

这是代码,求改,一直不通过

 

#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
typedef long long ll;
int main()
{
    ll L, R;
 scanf("%lld%lld", &L, &R);
 bool a[50001], ans[R-L+1];
 memset(a,false,sizeof(a));
    memset(ans,false,sizeof(ans));
  ll cnt = 0, pri[50001];
     for (int i = 2; i <= 50000; ++ i)
        if (!a[i])
        {
            pri[++cnt] = i;
            for (int j = i << 1; j <= 50000; j += i)
                a[j] = 1;
        }
   
    for ( int i = 1; i <= cnt; i++)
    {
        for (ll j = max((ll)2,(L-1)/ pri[i]+1 )* pri[i]; j <= R; j += pri[i])       // 筛出 L~R 中的素数。
            if(j - L >= 0) ans[j - L] = 1;
    }
    int tot = 0;
    for(int i = 0 ; i <= R - L ; ++ i) if(!ans[i]) tot ++;
    printf("%d\n" , tot);
    return 0;
}

  • 写回答

1条回答 默认 最新

  • 智者知已应修善业 2021-04-11 20:42
    关注

    判断质素可参https://ask.csdn.net/questions/7404400?spm=1005.2025.3001.5141

    区间的话设置起始值和终止值即可。

    本案例让你自己去对比看哪里问题,自己去核对才是正道。如果非要学我的代码,可在线识别,懒人也该有懒人的办法,至少懒人低头吃能够吃到的饼也算是个办法。

    int a=111,aa=777;while(a<=aa)if(质数判断(a))cout<<a<<endl,a+=2;else a+=2;
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程