题解 | #T2#

本关考验你求最大值功夫(max)

https://ac.nowcoder.com/acm/contest/90630/A

对于这一题,我们先用线性筛处理每一个质数,两个质数中的合数肯定是前一半是连小的,后一半联大的。然后由于1到x的和是x*(x+1)/2,两个加起来就是x*(x+1)。值得注意的是:最后会有一部分没处理,需要补全。

贴代码:

#include<bits/stdc++.h>
using namespace std;
bool st[10000030];
int primes[700030],cha[700030];
int primes_sum(int x){
    int cnt=0;
    for(int i=2;i<=x;i++){
        if(!st[i]){
            primes[cnt++]=i;
        }
        for(int j=0;j<cnt && primes[j]*i<=x;j++){
            st[primes[j]*i]=1;
            if(i%primes[j]==0) break;
        }
    }
    return cnt;
}
int main(){
    int n;
    cin>>n;
    int cnt=primes_sum(n);
    int sum=2;
    for(int i=2;i<cnt;i++){
        int nn=(primes[i]-primes[i-1])/2;
        sum+=nn*(nn+1);
    }
    cout<<sum+(n-primes[cnt-1])*(n-primes[cnt-1]+1)/2;
}

全部评论
还要注意n=1,2的时候,直接输出n-1;
点赞 回复 分享
发布于 10-08 19:31 江西
Orz,AC BRO
点赞 回复 分享
发布于 10-08 20:51 广东

相关推荐

10-28 15:45
门头沟学院 C++
西南山:海康威视之前不是大规模裁员吗
点赞 评论 收藏
分享
最近和朋友聊天,她说了句让我震惊的话:"我发现我连周末点外卖都开始'最优解'了,一定要赶在高峰期前下单,不然就觉得自己亏了。"这不就是典型的"班味入侵"吗?工作思维已经渗透到生活的方方面面。
小型域名服务器:啊?我一直都这样啊?我还以为是我爱贪小便宜呢?每次去实验室都得接一杯免费的开水回去,出门都得规划一下最短路径,在宿舍就吃南边的食堂,在实验室就吃北边的食堂,快递只有顺路的时候才取。
点赞 评论 收藏
分享
3 1 评论
分享
牛客网
牛客企业服务