求助站外题
  • 板块题目总版
  • 楼主chen_qian
  • 当前回复0
  • 已保存回复0
  • 发布时间2021/9/21 18:23
  • 上次更新2023/11/4 05:57:03
查看原帖
求助站外题
128870
chen_qian楼主2021/9/21 18:23

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

简单的线筛函数出来,但是交上去 RE。

#include<bits/stdc++.h>
#define N 10000000
#define ll long long 
using namespace std;
bool vis[N+5],is[N+5];
int p[N],cnt;
int fac[N+5];
bool prework(){
	is[1]=1,fac[1]=1;
	for(int i=2;i<=N;i++){
		if(!vis[i]){
			p[++cnt]=i;
			is[i]=1;
			fac[i]=i;
		}
		for(int j=1;j<=cnt&&p[j]*i<=N;j++){
			vis[p[j]*i]=1;
			fac[p[j]*i]=p[j];
			if(fac[i]==p[j]&&is[i]) is[i*p[j]]=1;
			else is[i*p[j]]=0;
			if(i%p[j]==0) break;
		}
	}
}
int main(){	
	prework();
	int a,b;
	scanf("%d%d",&a,&b);
    ll ans=0;
	for(int i=a;i<=b;i++){
        if(is[i]) ans+=fac[i];
        else ans++;
    }
    printf("%lld\n",ans);
	return 0;
} 
2021/9/21 18:23
加载中...