为什么这道题这样写会全部RE
查看原帖
为什么这道题这样写会全部RE
244059
king_xbz楼主2020/7/17 12:17
#include<bits/stdc++.h>
#define h 5001
#define p 3094895
#define int long long
using namespace std;
int s[p],f[p];
int phi[p];
bool vis[p];
int prim[p];
inline int read();
inline int oula(int x);
signed main()
{
	int n;
	cin>>n;
	oula(n);
	for(int i=1;i<=n;i++)
	for(int j=i+i;j<=n;j+=i)
	f[j]+=i*phi[j/i];
	s[2]=f[2];
	for(int i=3;i<=n;i++)
	s[i]=s[i-1]+f[i];
	cout<<s[n];
	return 0;
}
inline int oula(int x)
{
	int cnt=0;
	vis[1]=1,vis[0]=1;
	for(int i=2;i<=x;i++)
	if(!vis[i])
	for(int j=i*i;j<=x;j+=i)
	vis[j]=1;
	phi[1]=1;
	for(int i=1;i<=x;i++)
	{
		if(!vis[i])
		prim[++cnt]=i,phi[i]=i-1;
		for(int j=1;j<=cnt&&prim[j]*i<=x;j++) 
		if(i%prim[j]==0)
		{
			phi[i*prim[j]]=phi[i]*prim[j];
			break;
		}
		else
		phi[i*prim[j]]=phi[i]*phi[prim[j]];
	}
} 
2020/7/17 12:17
加载中...