[go: up one dir, main page]

矜(bai)持(gei)的云拏 2022-10-29 14:17 采纳率: 81.3%
浏览 35
已结题

关于超时的问题,如何解决?

Interprime
题目描述
n是两个连续的奇素数的平均值,且n不是素数,那么我们称这样的数是"内部素数"。求区间[a,b]内"内部素数"的个数。比如,前5个"内部素数"是4,6,9,12,15。

输入
第一行是样例数T(1≤T≤1000)。 每个样例一行,为三个整数a,b(1≤a≤b≤106)。

输出
每行输出一个样例的结果。

样例输入
5
1 10
1 100
1 1000
1 10000
1 100000
样例输出
3
24
166
1228
9591

问题:我该如何优化这个代码,现在是超时了的
时间要求是1s,空间要求不需要管

//连续的(奇数&&素数)/2=一个内部素数==下标,其值为1
//SUM【】是前缀和
#include <bits/stdc++.h>
using namespace std;
int no_prime[1000001]={0};
int sum[1000001]={0};
int interprime[1000001]={0};
int jiprime[1000001]={0};
int main(){
    int t;
    cin>>t;
    no_prime[0]=no_prime[1]=1;
    int i,j;
    for(i=2;i<1000001;i++)
        if(!no_prime[i])
            for(j=i*2;j<1000001;j+=i)
                no_prime[j]=1;
    //打素数表
    for(i=1;i<1000001;i+=2)
        if(!no_prime[i]) jiprime[i]=1;
    //内部素数表
    for(i=1;i<1000001;i+=2){
        for(j=i+2;j<1000001;j+=2){
            if(jiprime[i]&&jiprime[j]){
                interprime[(i+j)/2]=1;
                break;//保证连续,一有就跳出
            }
        }
    }
    sum[3]=sum[2]=sum[1]=0;
    for(i=4;i<1000001;i++){
        sum[i]+=sum[i-1]+interprime[i];
    }
    
    while(t--){
        int a,b;
        cin>>a>>b;
        cout<<sum[b]-sum[a-1]<<endl;
    }
    
    return 0;
    
}

  • 写回答
1条回答 默认 最新
  • CSDN-Ada助手 CSDN-AI 官方账号 2022-10-29 16:10
    关注
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月1日
  • 创建了问题 10月29日

悬赏问题

  • ¥100 IED中交流采样通道、以及程序流程的设计
  • ¥15 我如果只想表示节点的结构信息,使用GCN方法不进行训练可以吗
  • ¥15 KeiI中头文件找不到怎么解决
  • ¥15 QT6将音频采样数据转PCM
  • ¥15 本地安装org.Hs.eg.dby一直这样的图片报错如何解决?
  • ¥15 下面三个文件分别是OFDM波形的数据,我的思路公式和我写的成像算法代码,有没有人能帮我改一改,如何解决?
  • ¥15 Ubuntu打开gazebo模型调不出来,如何解决?
  • ¥100 有chang请一位会arm和dsp的朋友解读一个工程
  • ¥50 求代做一个阿里云百炼的小实验
  • ¥15 查询优化:A表100000行,B表2000 行,内存页大小只有20页,运行时3页,设计两个表等值连接的最简单的算法