0分求调(
  • 板块P3601 签到题
  • 楼主shumu
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/6/13 17:25
  • 上次更新2024/6/13 20:37:29
查看原帖
0分求调(
680434
shumu楼主2024/6/13 17:25
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
ll l,r,phi[1000010],vis[1000010],phi_ans[1000010],ans,mod=666623333;
bitset<1000010> not_prime;
vector<int> prime;
int main() {
	cin>>l>>r;
	for(int i=2;i<=1000000;i++) {
		if(!not_prime[i]) {
			prime.push_back(i);
			phi[i]=i-1; 
		}
		for(int prime_j:prime) {
			if(i*prime_j>1000000) {
				break;
			}
			not_prime[i*prime_j]=true;
			if(i%prime_j==0) {
				phi[i*prime_j]=phi[i]*phi[prime_j];
				break;
			}
		}
	}
	for(int i=l;i<=r;i++) {
		phi_ans[i-l]=1;
		vis[i-l]=i;
	}
	for(int prime_j:prime) {
		for(int i=(l+2)/prime_j;i*prime_j<=r;i++) {
			phi_ans[i*prime_j-l]*=phi[prime_j];
			vis[i*prime_j-l]/=prime_j;
		}
	}
	for(int i=0;i<r-l;i++) {
		if(vis[i]!=1) {
			phi_ans[i]*=vis[i]-1;
		}
	}
	for(int i=l;i<=r;i++) {
		ans+=i;
		ans-=phi_ans[i-l];
	}
	cout<<ans;
	return 0;
}
2024/6/13 17:25
加载中...