样例过不了 求调 悬关
查看原帖
样例过不了 求调 悬关
623697
yintaocheng楼主2023/11/14 21:24
#include <bits/stdc++.h>
#define int long long
using namespace std;
inline int read()
{
	int s=0;
	bool f=false;
	char c=getchar();
	while(!isdigit(c))
	{
		f=(c=='-');
		c=getchar();
	}
	while(isdigit(c))
	{
		s=(s<<3)+(s<<1)+c-'0';
		c=getchar();
	}
	return f?-s:s;
}
void write(int x)
{
	if(x<0)
	{
		putchar('-');
		x=-x;
	}
	if(x>9)
	{
		write(x/10);
	}
	putchar(x%10+'0');
}
int n,prime[10000005],phi[10000005],smp[10000005];
bitset<100000005>vis;
signed main()
{
	phi[1]=1;
	for(int i=2;i<=10000000;i++)
	{
		if(!vis[i])
		{
			vis[i]=true;
			prime[++prime[0]]=i;
			phi[i]=i-1;
		}
		for(int j=1;j<=prime[0]&&i*prime[j]<=10000000;j++)
		{
			vis[prime[j]*i]=true;
			if(i%prime[j]==0)
			{
				phi[i*prime[j]]=phi[i]*prime[j];
				break;
			}
			phi[i*prime[j]]=phi[i]*phi[prime[j]];
		}
	}
	for(int i=1;i<=10000000;i++)
	{
		smp[i]=smp[i-1]+phi[i];
	}
	n=read();
	int l,r,ans=0;
	for(l=1;l<=n;l=r+1)
	{
		r=(n/(n/l));
		ans+=(smp[r]-smp[l-1])*(n/(n/l))*(n/(n/l));
	}
	write((ans-n*(n+1)/2)/2);
	return 0;
}
2023/11/14 21:24
加载中...