QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#669356#9515. 无限地狱zhouhuanyi0 1132ms147412kbC++142.6kb2024-10-23 18:20:062024-10-23 18:20:06

Judging History

This is the latest submission verdict.

  • [2024-10-23 18:20:06]
  • Judged
  • Verdict: 0
  • Time: 1132ms
  • Memory: 147412kb
  • [2024-10-23 18:20:06]
  • Submitted

answer

#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
#define N 5000000
#define M 200000
#define mod 998244353
using namespace std;
long long read()
{
	char c=0;
	long long sum=0;
	while (c<'0'||c>'9') c=getchar();
	while ('0'<=c&&c<='9') sum=sum*10+c-'0',c=getchar();
	return sum;
}
int MD(int x)
{
	return x>=mod?x-mod:x;
}
int MD2(int x)
{
	return x<0?x+mod:x;
}
void Adder(int &x,int d)
{
	x=x+d>=mod?x+d-mod:x+d;
	return;
}
void Adder2(int &x,int d)
{
	x=x+d<0?x+d+mod:x+d;
	return;
}
long long n,tong[M+1];
int length,sn,dp[N+1],DP[N+1],zdp[N+1],zDP[N+1],pw2[N+1],miu[N+1],smiu[N+1],wdp[M+1],wDP[M+1],tmiu[M+1];
bool nprime[N+1];
int fast_pow(int a,long long b)
{
	int res=1,mul=a;
	while (b)
	{
		if (b&1) res=1ll*res*mul%mod;
		mul=1ll*mul*mul%mod,b>>=1;
	}
	return res;
}
int S(long long x)
{
	if (x&1) return MD2(fast_pow(2,(x>>1)+1)-(x+1)%mod);
    else return MD2(3ll*fast_pow(2,(x>>1)-1)%mod-(x+1)%mod);
}
int get(long long x)
{
	if (x<=sn) return x;
	else return length-n/x+1;
}
int main()
{
	n=read();
	while (1ll*(sn+1)*(sn+1)<=n) ++sn;
	for (long long i=1,lst;i<=n;i=lst+1) lst=n/(n/i),tong[++length]=n/i;
	reverse(tong+1,tong+length+1);
	for (int i=1;i<=N;++i) miu[i]=1;
	for (int i=2;i<=N;++i)
		if (!nprime[i])
		{
			miu[i]=-1;
			for (int j=(i<<1);j<=N;j+=i)
			{
				miu[j]=-miu[j],nprime[j]=1;
				if ((j/i)%i==0) miu[j]=0;
			}
		}
	pw2[0]=1;
	for (int i=1;i<=N;++i) smiu[i]=MD2(smiu[i-1]+miu[i]),pw2[i]=2ll*pw2[i-1]%mod;
	for (int i=1;i<=N;++i)
	{
		Adder(zdp[i],zdp[i-1]),Adder(zDP[i],zDP[i-1]),Adder(dp[i],zdp[i]),Adder(DP[i],zDP[i]),Adder(dp[i],pw2[i-1]),Adder(DP[i],MD2(dp[i]-1));
		for (int j=(i<<1);j<=N;j+=i) Adder(zdp[j],DP[i]);
		for (int j=(i<<2);j<=N;j+=(i<<1)) Adder(zdp[j],1ll*pw2[(j-(i<<2))/(i<<1)]*MD2(2ll*MD(dp[i]+DP[i])%mod-1)%mod);
		for (int j=(i<<1);j<=N;j+=i) Adder(zDP[j],1ll*(j/i==2?mod-1:MD2(miu[j/i]-miu[j/i-1]))*MD2(3ll*dp[i]%mod-2)%mod);
	}
	for (int i=1;i<=length;++i)
	{
		if (tong[i]<=N) wdp[i]=dp[tong[i]],wDP[i]=DP[tong[i]],tmiu[i]=smiu[tong[i]];
		else
		{
			wdp[i]=fast_pow(2,tong[i]-1),tmiu[i]=1;
			for (long long j=2,lst;j<=tong[i];j=lst+1)
			{
				lst=tong[i]/(tong[i]/j);
				Adder2(tmiu[i],-1ll*((lst-j+1)%mod)*tmiu[get(tong[i]/j)]%mod);
				Adder(wdp[i],1ll*((lst-j+1)%mod)*wDP[get(tong[i]/j)]%mod);
				Adder(wdp[i],1ll*MD2(S(lst)-S(j-1))%mod*MD2(2ll*MD(wdp[get(tong[i]/j)]+wDP[get(tong[i]/j)])%mod-1)%mod);
				Adder(wDP[i],1ll*MD2(tmiu[get(lst)]-tmiu[get(j-1)])%mod*MD2(3ll*wdp[get(tong[i]/j)]%mod-2)%mod);
			}
			Adder(wDP[i],MD2(wdp[i]-1));
		}
	}
	printf("%d\n",wdp[length]);
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 0
Wrong Answer
time: 1132ms
memory: 147412kb

input:

6

output:

37

result:

wrong answer 1st numbers differ - expected: '38', found: '37'

Subtask #2:

score: 0
Skipped

Dependency #1:

0%

Subtask #3:

score: 0
Skipped

Dependency #2:

0%

Subtask #4:

score: 0
Skipped

Dependency #3:

0%

Subtask #5:

score: 0
Skipped

Dependency #4:

0%

Subtask #6:

score: 0
Skipped

Dependency #5:

0%