下来测试的时候明明有输出啊
查看原帖
下来测试的时候明明有输出啊
120438
Lacrymabre楼主2021/12/12 17:34

Wrong Answer.wrong answer Too short on line 1.

#include<iostream>
#include<cstdio>
#include<iomanip>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<stack>
#include<vector>
#include<map>
#include<set>

#define ll long long
#define _it set<node>::iterator
#define MAX 0x7fffffff
#define init inline int
#define INF 0X3fffffff
#define N 500001

using namespace std;

inline long long read(){
	ll f=1,s=0;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9')s=(s<<1)+(s<<3)+ch-'0',ch=getchar();
	return s*f;
}

ll n,m,ans,t;
ll u[N],phi[N];
map<ll,ll>v,M,P;
vector<ll>p;

const int mod = 998244353;

void prime(ll n){
	u[1]=1;v[1]=1;phi[1]=1;
	for(ll i=2;i<=n;i++){
		if(!v[i]) {u[i]=-1;p.push_back(i);phi[i]=i-1;}
		for(ll j=0;j<p.size()&&p[j]*i<=n;j++){
			v[p[j]*i]=1;
			if(!(i%p[j])) {phi[i*p[j]]=phi[i]*p[j];break;}
			else u[i*p[j]]=-u[i],phi[i*p[j]]=phi[i]*phi[p[j]];
		}
	}
	for(ll i=1;i<=n;i++) u[i]+=u[i-1],phi[i]+=phi[i-1];
}

ll sumu(ll n) {
	if(n<=500001) return u[n];
	if(M[n]) return M[n];
	ll res=1;
	for(ll l=2,r=0;l<=n;l=r+1){
		r=n/(n/l);
		res-=1ll*sumu(n/l)*(r-l+1)%mod;
	}
	M[n]=res;
	return M[n];
}

ll sump(ll n) {
	if(n<=500001) return phi[n];
	if(P[n]) return P[n];
	ll res=1;
	for(ll l=2,r=0;l<=n;l=r+1){
		r=n/(n/l);
		res-=1ll*sump(n/l)*(r-l+1)%mod;
	}
	P[n]=res;
	return P[n];
}

void cale(ll n){
	cout<<sump(n)<<" "<<sumu(n)<<"\n";
}

int main(){
	t=read();
	prime(N);
	while(t-->0){
		n=read();
		cale(n);
	}
	return 0;
}
2021/12/12 17:34
加载中...