QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#734928#9612. 月亮的背面是粉红色的275307894a67 2122ms231080kbC++142.9kb2024-11-11 16:04:172024-11-11 16:04:18

Judging History

你现在查看的是最新测评结果

  • [2024-11-11 16:04:18]
  • 评测
  • 测评结果:67
  • 用时:2122ms
  • 内存:231080kb
  • [2024-11-11 16:04:17]
  • 提交

answer

#include<bits/stdc++.h>
#define Gc() getchar()
#define Me(x,y) memset(x,y,sizeof(x))
#define Mc(x,y) memcpy(x,y,sizeof(x))
#define d(x,y) ((m)*(x-1)+(y))
#define R(n) (rnd()%(n)+1)
#define Pc(x) putchar(x)
#define LB lower_bound
#define UB upper_bound
#define fi first
#define se second
#define eb emplace_back
#define all(x) x.begin(),x.end()
using namespace std;using ll=long long;using db=double;using lb=long db;using ui=unsigned;using ull=unsigned long long;using pii=pair<int,int>;
const int N=1e8+5,M=3.3e7+5,K=1000+5,mod=1e9+7,Mod=mod-1;const db eps=1e-9;const int INF=1e9+7;mt19937 rnd(28382);
#define Tp template<typename T>
#define Ts template<typename T,typename... Ar>
namespace Debug{
	Tp void _debug(char* f,T t){cerr<<f<<'='<<t<<endl;}
	Ts void _debug(char* f,T x,Ar... y){while(*f!=',') cerr<<*f++;cerr<<'='<<x<<",";_debug(f+1,y...);}
	#ifdef LOCAL
	#define gdb(...) _debug((char*)#__VA_ARGS__,__VA_ARGS__)
	#else 
	#define gdb(...) void()
	#endif
}using namespace Debug;
ll n,k;int m;
bitset<N> flag;
char mu[N];
int pr[N/10],ph,d[N/10+5],cnt[N/10+5];
int limd;
void init(){
	mu[1]=1;
	for(int i=2;i<=k;i++){
		if(!flag[i]) pr[++ph]=i,mu[i]=-1;
		for(int j=1;j<=ph&&i*pr[j]<=k;j++){
			flag[i*pr[j]]=1;
			if(i%pr[j]==0) break;
			mu[i*pr[j]]=-mu[i];
		}
	}
	d[1]=1;cnt[1]=0;
	limd=min(k,1000000ll);
	for(int i=2;i<=limd;i++){
		if(!flag[i]) d[i]=2,cnt[i]=1;
		for(int j=1;j<=ph&&i*pr[j]<=k;j++){
			if(i%pr[j]==0){
				d[i*pr[j]]=d[i]/(cnt[i]+1)*(cnt[i]+2);
				cnt[i*pr[j]]=cnt[i]+1;
				break;
			}
			d[i*pr[j]]=d[i]*2;
			cnt[i*pr[j]]=1;
		}
		d[i]+=d[i-1];
	}
}


using cp=complex<ll>;using LL=__int128;
cp pt;int lim;
ll tot1,tot2,ans1,ans2;
void calc(cp l,cp r,ll n){
	// gdb(pt.real(),pt.imag());
	if(pt.imag()<=lim) return;
	cp mid=l+r;
	cp p=pt+mid;
	if(p.imag()>n/p.real()) calc(l,mid,n);
	while(pt.imag()>lim){
		p=pt+mid;
		if(p.imag()>n/p.real()){
			tot1+=(pt.real()+p.real()-1)*(-mid.imag()+1)/2-pt.real();
			pt+=mid;
		}else break;
	}
	if(LL(r.imag())*p.real()*p.real()>=-LL(n)*r.real()) calc(mid,r,n);
}

void Solve(){
	scanf("%lld%d",&n,&m);
	k=sqrtl(n);
	init();
	ll Ld=n+1;
	for(int i=1;1ll*i*i<=n;i++)if(mu[i]){
		ll d=n/i/i;
		if(d^Ld){
			Ld=d;int k=sqrtl(d);
			if(d<=limd){
				tot1=::d[d];
			}else{
				tot1=0;lim=powl(d,1.0/3)*5;
				pt=cp(d/k,k+1);calc(cp(0,-1),cp(1,0),d);
				for(int i=1;i<pt.imag();i++) tot1+=d/i;
				tot1=tot1*2-1ll*k*k;
			}
			if(m){
				tot2=-(1ll*(k+1)*k/2%mod)*(1ll*(k+1)*k/2%mod);
				for(int j=1;j<=k;j++){
					ll k=d/j%mod;
					tot2+=k*(k+1)%mod*j%mod;
				}
			}
			tot1%=mod;tot2%=mod;
		}
		ans1+=tot1*mu[i];
		if(m) ans2+=tot2*mu[i]*i%mod*i%mod;
	}
	ans1=(ans1%mod+mod)%mod;
	if(m) ans2=(ans2%mod+mod)%mod;
	printf("%lld ",ans1*ans1%mod);
	if(m) printf("%lld\n",ans2*ans2%mod);
}
int main(){
	int t=1;
	// scanf("%d",&t);
	while(t--) Solve();
	cerr<<clock()*1.0/CLOCKS_PER_SEC<<'\n';
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 3
Accepted

Test #1:

score: 3
Accepted
time: 1ms
memory: 8132kb

input:

1726 1

output:

84290761 74619067

result:

ok 2 number(s): "84290761 74619067"

Test #2:

score: 3
Accepted
time: 1ms
memory: 8100kb

input:

3608 1

output:

433014481 672891299

result:

ok 2 number(s): "433014481 672891299"

Test #3:

score: 3
Accepted
time: 1ms
memory: 8064kb

input:

2921 1

output:

271096225 547734266

result:

ok 2 number(s): "271096225 547734266"

Subtask #2:

score: 3
Accepted

Test #4:

score: 3
Accepted
time: 0ms
memory: 8164kb

input:

6116899 1

output:

219318963 301450440

result:

ok 2 number(s): "219318963 301450440"

Test #5:

score: 3
Accepted
time: 1ms
memory: 8148kb

input:

6260707 1

output:

148720176 263856753

result:

ok 2 number(s): "148720176 263856753"

Test #6:

score: 3
Accepted
time: 1ms
memory: 8072kb

input:

6763677 1

output:

944542490 136397156

result:

ok 2 number(s): "944542490 136397156"

Subtask #3:

score: 8
Accepted

Test #7:

score: 8
Accepted
time: 4ms
memory: 12360kb

input:

6469467712 0

output:

147393348 

result:

ok 1 number(s): "147393348"

Test #8:

score: 8
Accepted
time: 0ms
memory: 8484kb

input:

8967004453 0

output:

229436583 

result:

ok 1 number(s): "229436583"

Test #9:

score: 8
Accepted
time: 3ms
memory: 10272kb

input:

6636594384 0

output:

995965072 

result:

ok 1 number(s): "995965072"

Subtask #4:

score: 8
Accepted

Test #10:

score: 8
Accepted
time: 6ms
memory: 12564kb

input:

8292948816 1

output:

566765721 287485757

result:

ok 2 number(s): "566765721 287485757"

Test #11:

score: 8
Accepted
time: 6ms
memory: 10600kb

input:

8592748771 1

output:

649470692 164561252

result:

ok 2 number(s): "649470692 164561252"

Test #12:

score: 8
Accepted
time: 6ms
memory: 8564kb

input:

9827380808 1

output:

291159931 188690805

result:

ok 2 number(s): "291159931 188690805"

Subtask #5:

score: 8
Accepted

Test #13:

score: 8
Accepted
time: 53ms
memory: 18984kb

input:

900472451132 1

output:

247050500 963765719

result:

ok 2 number(s): "247050500 963765719"

Test #14:

score: 8
Accepted
time: 47ms
memory: 19832kb

input:

850862494659 1

output:

200210720 915108650

result:

ok 2 number(s): "200210720 915108650"

Test #15:

score: 8
Accepted
time: 50ms
memory: 16620kb

input:

851346512859 1

output:

895785763 504512885

result:

ok 2 number(s): "895785763 504512885"

Subtask #6:

score: 10
Accepted

Test #16:

score: 10
Accepted
time: 171ms
memory: 39848kb

input:

9864907300784 1

output:

359943536 720268421

result:

ok 2 number(s): "359943536 720268421"

Test #17:

score: 10
Accepted
time: 151ms
memory: 33572kb

input:

8181674676063 1

output:

839993102 994056029

result:

ok 2 number(s): "839993102 994056029"

Test #18:

score: 10
Accepted
time: 164ms
memory: 38032kb

input:

9893510217522 1

output:

157499971 930653488

result:

ok 2 number(s): "157499971 930653488"

Subtask #7:

score: 13
Accepted

Test #19:

score: 13
Accepted
time: 227ms
memory: 98020kb

input:

96735749745529 0

output:

223354886 

result:

ok 1 number(s): "223354886"

Test #20:

score: 13
Accepted
time: 229ms
memory: 100796kb

input:

95243570720799 0

output:

555372474 

result:

ok 1 number(s): "555372474"

Test #21:

score: 13
Accepted
time: 238ms
memory: 99964kb

input:

97668723090105 0

output:

84562124 

result:

ok 1 number(s): "84562124"

Subtask #8:

score: 14
Accepted

Test #22:

score: 14
Accepted
time: 545ms
memory: 98156kb

input:

94060593399194 1

output:

52991150 887133157

result:

ok 2 number(s): "52991150 887133157"

Test #23:

score: 14
Accepted
time: 554ms
memory: 101708kb

input:

98527940728119 1

output:

281611635 910356955

result:

ok 2 number(s): "281611635 910356955"

Test #24:

score: 14
Accepted
time: 529ms
memory: 96828kb

input:

90501814019947 1

output:

666385143 229785369

result:

ok 2 number(s): "666385143 229785369"

Subtask #9:

score: 0
Wrong Answer

Test #25:

score: 0
Wrong Answer
time: 2122ms
memory: 231080kb

input:

9772457586483846 0

output:

6750387 

result:

wrong answer 1st numbers differ - expected: '631039552', found: '6750387'

Subtask #10:

score: 0
Wrong Answer

Test #31:

score: 0
Wrong Answer
time: 1674ms
memory: 169388kb

input:

949243849085176 1

output:

739817805 129106106

result:

wrong answer 1st numbers differ - expected: '508465534', found: '739817805'