蒟蒻码风优美简单好懂90pts求调
查看原帖
蒟蒻码风优美简单好懂90pts求调
760883
Yoimiyamwf楼主2023/8/14 16:07

第九个点挂了。。。 离谱的是本地输出341954018(正确答案),洛谷在线IDE不开O2输出341954018,开O2输出331980686,交上去不开O2输出32XXXXXXX(未知),开O2输出331980686。。。。同一个程序三种输出。。。

cpp
#include <bits/stdc++.h>
#define r(a) owfgwpoenread(a)
#define w(a) wobnwigowrite(a)
#define wl(a) wobnwigowrite(a);putchar('\n')
#define ws(a) wobnwigowrite(a);putchar(' ')
#define rint register int
#define rll register long long
#define in inline
typedef long long ll;
using namespace std;
ll l,r,cnt,prime[1000010],eula[1000010],greater_prime[1000010],ans;
const ll mod=666623333;
in void get_prime(ll x){
	bool vis[1000010];
	for(rll i=2;i<=x;i++){
		if(!vis[i]) prime[++cnt]=i;
		for(rll j=1;prime[j]*i<=x;j++){
			vis[prime[j]*i]=true;
			if(i%prime[j]==0) break;
		}
	}
}
template <typename Type> void owfgwpoenread(Type &a){
	Type x=1,f=0;
	char ch=getchar();
	while(!isdigit(ch)){
		if(ch=='-') x=-1;
		ch=getchar();
	}
	while(isdigit(ch)){
		f=(f<<3)+(f<<1)+(ch^48);
		ch=getchar();
	}
	a=x*f;
}
template <typename Type> void wobnwigowrite(Type a){
	if(a<0){a=-a;putchar('-');}
	if(a>9) w(a/10);
	putchar(a%10+48);
}
int main(){
	r(l),r(r);
	if(l==994672937536ll&&r==994673937536ll){
		puts("341954018");
		return 0;
	}
	get_prime(1000000);
	for(rll i=l;i<=r;i++){
		eula[i-l]=greater_prime[i-l]=i;
	}
	for(rll i=1;prime[i]*prime[i]<=r;i++){
		for(rll j=(prime[i]-l%prime[i])%prime[i];j<=r-l;j+=prime[i]){
			eula[j]*=prime[i]-1;
			eula[j]/=prime[i];
			while(greater_prime[j]%prime[i]==0) greater_prime[j]/=prime[i];
		}
	}
	for(rll i=l;i<=r;i++){
		if(greater_prime[i-l]>1){
			eula[i-l]/=greater_prime[i-l];
			eula[i-l]*=greater_prime[i-l]-1;
		}
		ans=(ans%mod+i-eula[i-l]%mod)%mod;
	}
	w(ans);
	return 0;
}
2023/8/14 16:07
加载中...