QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#744242#7493. 此时此刻的光辉TheZone100 ✓1285ms71092kbC++204.2kb2024-11-13 21:17:052024-11-13 21:17:07

Judging History

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

  • [2024-11-13 21:17:07]
  • 评测
  • 测评结果:100
  • 用时:1285ms
  • 内存:71092kb
  • [2024-11-13 21:17:05]
  • 提交

answer

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int gi()
{
	char c;int num=0,flg=1;
	while((c=getchar())<'0'||c>'9')if(c=='-')flg=-1;
	while(c>='0'&&c<='9'){num=num*10+c-48;c=getchar();}
	return num*flg;
}
#define N 100005
#define M 500
const int mod=19260817;
int prime[1400005],tot;
int inv[500005];
bool vis[20000005];
void shai()
{
	vis[1]=1;
	int i,j;
	for(i=2;i<=20000000;i++){
		if(!vis[i])prime[++tot]=i;
		for(j=1;j<=tot;j++){
			int tmp=i*prime[j];
			if(tmp>20000000)break;
			vis[tmp]=1;
			if(i%prime[j]==0)break;
		}
	}
	inv[1]=inv[0]=1;
	for(i=2;i<=500000;i++)
		inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;
}
 
int pr[105],pcnt;
int a[N][5],cnt[N],hh[5*N],hcnt;
int sum[100][N];
inline int ksm(int x,int y,int p)
{
	int ret=1;
	while(y){
		if(y&1)ret=1ll*x*ret%p;
		y>>=1;x=1ll*x*x%p;
	}
	return ret;
}
int gcd(int x,int y){return !y?x:gcd(y,x%y);}
int bas[6]={3,7,37,79,97,19260817};
inline bool mler(int n)
{
	if(n<=20000000)return vis[n]^1;
	int r=n-1,t=0;
	while(!(r&1))r>>=1,t++;
	for(int i=0;i<6;i++){
		if(n==bas[i])return 1;
		int now,pre=ksm(bas[i],r,n);
		for(int k=0;k<t;swap(now,pre),k++)
			if((now=1ll*pre*pre%n)==1&&pre!=1&&pre!=n-1)
				return 0;
		if(pre!=1)return 0;
	}
	return 1;
}
/*inline int ab(int x){return x<0?-x:x;}
int rho(int n,int c)
{
	int i=1,j=0,x=rand()%(n-1)+1,y=x;
	int d=1,tmp=1;
	while(d==1){
		x=(1ll*x*x+c)%mod;
		tmp=1ll*tmp*ab(y-x)%mod;
		if(++j==i)i<<=1,y=x,d=gcd(tmp,n);
		if(!(j&127))d=gcd(tmp,n);
	}
	return d==n?rho(n,c+1):d;
}
void plar(int n)
{
	if(n==1)return;
	if(mler(n)){pr[++pcnt]=n;return;}
	int d=rho(n,3);
	plar(d);plar(n/d);
}*/
#define D 366
int tong[5*N],ans[N];
struct node{
	int l,r,id;
}q[N];
inline bool cmp(const node &x,const node &y){int t=(x.l)/D;return t<(y.l/D)||(t==(y.l/D)&&(((t&1)&&x.r<y.r)||(!(t&1)&&x.r>y.r)));}
inline int query(int l,int r)
{
	int ret=1;
	for(int i=1;i<=95;i++)
		ret=1ll*ret*(sum[i][r]-sum[i][l-1]+1)%mod;
	return ret;
}
//#include<ctime>
//double c1;
int main()
{
	//c1=clock();
	//freopen("1.in","r",stdin);
	
	srand(0);shai();
	int n,i,j,m,x,l,r,mul,tmp;
	n=gi();m=gi();
	for(i=1;i<=n;i++){
		x=gi();//printf("%d\n",i);
		bool flg;
		if(x>500&&mler(x)){
			a[i][++cnt[i]]=x;
			hh[++hcnt]=x;
			//printf("%d\n",x);
			continue;
		}
		for(j=1;j<=95&&x>1;j++){
			flg=0;
			while(x%prime[j]==0){
				sum[j][i]++;
				x/=prime[j];
				//printf("%d ",prime[j]);
				flg=1;
			}
		}
		if(x>500&&mler(x)){
			a[i][++cnt[i]]=x;
			hh[++hcnt]=x;
			//printf("%d\n",x);
			continue;
		}
		for(j=96;1ll*prime[j]*prime[j]<=x&&x>1;j++){
			flg=0;
			while(x%prime[j]==0){
				a[i][++cnt[i]]=prime[j];
				hh[++hcnt]=prime[j];
				//printf("%d ",prime[j]);
				x/=prime[j];
				flg=1;
			}
			if(flg&&mler(x))break;
		}
		if(x>500){
			a[i][++cnt[i]]=x;
			hh[++hcnt]=x;
		}
		//printf("%d\n",x);
		/*pcnt=0;plar(x);
		for(j=1;j<=pcnt;j++){
			a[i][++cnt[i]]=pr[j];
			hh[++hcnt]=pr[j];
			//printf("%d ",pr[j]);
		}*/
	}
	sort(hh+1,hh+hcnt+1);
	hcnt=unique(hh+1,hh+hcnt+1)-hh-1;
	for(i=1;i<=n;i++)
		for(j=1;j<=cnt[i];j++)
			a[i][j]=lower_bound(hh+1,hh+hcnt+1,a[i][j])-hh;
	for(i=1;i<=95;i++)
		for(j=1;j<=n;j++){
			sum[i][j]+=sum[i][j-1];
			if(sum[i][j]>=mod)sum[i][j]-=mod;
		}
	for(i=1;i<=m;i++){q[i].l=gi();q[i].r=gi();q[i].id=i;if(q[i].l>q[i].r)swap(q[i].l,q[i].r);}
	sort(q+1,q+m+1,cmp);
	
	mul=1;l=1;r=0;
	
	//printf("%.3fs\n",(clock()-c1)/1000);
	//freopen("1.out","w",stdout);
	for(i=1;i<=m;i++){
		while(l>q[i].l){
			l--;
			for(j=1;j<=cnt[l];j++){
				tmp=(++tong[a[l][j]]);
				mul=1ll*mul*inv[tmp]%mod*(tmp+1)%mod;
			}
		}
		while(r<q[i].r){
			r++;
			for(j=1;j<=cnt[r];j++){
				tmp=(++tong[a[r][j]]);
				mul=1ll*mul*inv[tmp]%mod*(tmp+1)%mod;
			}
		}
		while(l<q[i].l){
			for(j=1;j<=cnt[l];j++){
				tmp=(--tong[a[l][j]]);
				mul=1ll*mul*inv[tmp+2]%mod*(tmp+1)%mod;
			}
			l++;
		}
		while(r>q[i].r){
			for(j=1;j<=cnt[r];j++){
				tmp=(--tong[a[r][j]]);
				mul=1ll*mul*inv[tmp+2]%mod*(tmp+1)%mod;
			}
			r--;
		}
		ans[q[i].id]=1ll*mul*query(l,r)%mod;
	}
	for(i=1;i<=m;i++)
		printf("%d\n",ans[i]);
	//freopen("CON","w",stdout);
	//printf("%.3fs\n",(clock()-c1)/1000);
}

Details

Tip: Click on the bar to expand more detailed information

Pretests


Final Tests

Test #1:

score: 6.66667
Accepted
time: 630ms
memory: 71092kb

input:

100000 100000
72860869 6794806 354302233 4367938 12150958 946396393 192084587 603527219 247843751 921337927 312086501 449070803 808649453 816753983 819447631 1155878 836944957 241154423 220531159 163629623 619228061 781352119 521739721 381082847 299429513 251794757 768096613 94062743 82889243 305693...

output:

14294646
7341694
9039631
12630708
818671
3475162
6328388
17941177
11794236
11946319
8934997
9762193
12433739
18094748
3332783
18627537
18262287
17297023
14700458
11266315
9393676
14974683
9927992
15683314
12849467
5637005
16084213
10196759
5880540
3429022
13048814
78957
10961921
3552642
16345848
169...

result:

ok 100000 numbers

Test #2:

score: 6.66667
Accepted
time: 644ms
memory: 70244kb

input:

100000 100000
468179951 929895271 564626131 136544591 36630961 966536093 9701282 519173869 26423611 339561571 246431413 894909623 56472707 772815613 6086338 217546913 231407767 3492609 371122711 762359867 13638242 134434961 419343721 2141686 4459558 300851393 885428707 4422358 469951619 262533077 68...

output:

5738320
12898257
14527509
11522929
17627349
16848980
7709719
15187612
11067829
4272713
2148547
18950735
10813634
25286
17413364
12445403
6377108
5618571
5104766
14451902
13060430
5907981
2502446
9292373
2751483
11219219
12008338
9572773
10741203
17305069
5980780
10368810
10820502
6685667
4363566
974...

result:

ok 100000 numbers

Test #3:

score: 6.66667
Accepted
time: 630ms
memory: 70432kb

input:

100000 100000
632866393 5724442 27167029 625221713 778431097 101576827 198685939 798362317 227289973 198379327 11357846 375363083 8196458 756177223 468048011 13347377 13015906 789973439 6423838 155851463 777534103 778896161 684056459 284496517 847653713 353847491 124378 105481433 735778669 964744433...

output:

4359702
7425593
19172929
11166465
2268265
17775426
18880564
13384740
14033537
14889256
776958
11305916
14776441
15098695
227421
17677385
960325
9163510
7196552
14202175
7872075
5712624
19121132
12026139
698538
8621306
6957875
13544052
14232686
11034987
5618042
8093396
8455701
7275993
10639947
184651...

result:

ok 100000 numbers

Test #4:

score: 6.66667
Accepted
time: 646ms
memory: 69756kb

input:

100000 100000
747575443 220447853 20382629 511113299 847023467 762748421 323422513 31531147 541387753 763105663 141594097 576768233 57928399 5982278 870288611 899798147 15265226 355003963 41678453 799760557 99548567 6652834 644676779 114502217 10180034 553653949 661687567 706663099 545132347 3734438...

output:

6877716
203331
14592987
7742962
217677
4276752
5687376
10943929
15761677
530626
10169588
11856262
10175291
17383040
2171767
13418374
18248312
12602867
11782151
6651911
6970508
7901102
16010999
9728413
13881405
18271602
5732025
5694831
18162180
7706185
15633665
7265731
10869785
13924574
9975358
14595...

result:

ok 100000 numbers

Test #5:

score: 6.66667
Accepted
time: 592ms
memory: 70340kb

input:

100000 100000
197519477 792109459 333436993 786735671 31832831 903910463 480691891 167111701 34650793 518242873 36354677 127594699 984582817 668643403 579910367 596621537 56031571 747874009 744728377 458213729 111866539 377803511 121893241 348313211 340121461 995985733 631026887 379572929 806068201 ...

output:

18063946
17822598
15476513
17140932
7239792
19004812
4549795
7092586
9100102
2701091
16839174
8355192
18708636
14873315
5478918
2952866
16807712
3819769
8053115
13262060
5786596
10764572
624185
4049583
3349421
12648773
675330
18138990
16686659
3752445
12135417
17555988
13509269
16818183
6598092
1881...

result:

ok 100000 numbers

Test #6:

score: 6.66667
Accepted
time: 255ms
memory: 68940kb

input:

100000 100000
636605970 497668710 811985790 616786170 741110370 612221610 924241890 743813070 812221410 833662830 800597490 281291010 833662830 547777230 924241890 340510170 363993630 741110370 434444010 865554690 648858210 855811110 514083570 588153930 998887890 861290430 300690390 933722790 959619...

output:

12227938
1883837
18767178
6444000
12065716
8598401
17547732
4866076
2071323
15645076
4292407
11761531
13249218
18565808
7698839
17799649
90902
13146704
17164865
12504886
2258362
10307841
7773826
8873692
3720677
15544878
18626365
18202696
15526708
9389389
9548470
14416017
10328626
2188875
13455429
17...

result:

ok 100000 numbers

Test #7:

score: 6.66667
Accepted
time: 430ms
memory: 70416kb

input:

100000 100000
28753561 256908466 987982710 166681831 909532470 274745689 678436268 742404321 67162764 29767207 872090310 165166476 678407730 504894390 741110370 166885181 649879230 597347712 223092870 710985045 907776870 412245817 83149316 149271353 777686910 373812814 151826458 998887890 21839995 9...

output:

14039792
8299253
14263067
19007688
17520255
15015221
2974225
12756715
19102536
14656968
17811822
4819902
1868531
10789818
6688680
16531064
3862552
6780827
6340941
10005758
8513234
18875937
2044479
6044822
18968336
14715955
14050181
6488212
14324249
1233831
14731328
10658936
16242658
1374784
3106829
...

result:

ok 100000 numbers

Test #8:

score: 6.66667
Accepted
time: 560ms
memory: 70904kb

input:

100000 100000
7666929 699514201 480740851 262337181 91700991 13422135 932835421 33003139 12225223 267154389 246617065 41204417 463131953 62953634 159357355 39990877 354203665 35785849 719236698 76949457 627817 265054375 4815361 191041427 987396655 198824249 628162547 387791103 61674553 58160301 9471...

output:

17505820
4163193
8095778
10146561
4182693
2124321
14992195
18823658
14854165
12594930
12080275
17130990
16974223
13716570
18337246
9019514
14230882
9047975
9353401
15325925
6693816
14745577
8301056
15380963
13229366
37521
13601249
14961115
14220251
2418347
14799811
15361945
15474755
1965529
14216852...

result:

ok 100000 numbers

Test #9:

score: 6.66667
Accepted
time: 544ms
memory: 70812kb

input:

100000 100000
232603561 256836855 44080513 125914375 537902912 13398717 141708249 489216001 56254057 319446457 274889525 127466411 21634866 391014997 58757480 337474977 24030325 298656513 58797738 204725951 1850401 73950680 9425044 803970251 38690081 27511255 664667609 76448241 157897559 185798687 3...

output:

16534809
14916340
316321
19185972
16725534
9149156
8546505
5289978
18780210
5710340
13500985
18036838
10760237
17988797
14613876
5089518
16456544
11728410
2304839
12702696
19162726
13948999
12259550
6055037
7021045
18274559
16015749
5626182
315809
13398585
7359976
9926624
9588844
9871040
18782360
16...

result:

ok 100000 numbers

Test #10:

score: 6.66667
Accepted
time: 756ms
memory: 70524kb

input:

100000 100000
981119849 953918893 912782329 960900569 956147021 978523279 958166633 922406669 928134131 978223439 912894617 902949037 947530663 924051959 972837757 901080097 981552679 948914237 918825239 977327419 982976069 970511539 984488993 939218213 971379007 977670427 950667847 918300997 918622...

output:

523446
2814527
9337791
900317
2373172
18200199
16691503
14361723
9370393
4133391
456578
7239334
11925325
14541250
17454172
10958071
11726018
16538529
1470472
17840935
701946
15777424
12340061
8242674
15523471
18445233
16253692
13850147
4762998
16542747
1908291
12211190
4506123
1733354
14172801
16191...

result:

ok 100000 numbers

Test #11:

score: 6.66667
Accepted
time: 599ms
memory: 70468kb

input:

100000 100000
999943433 999965599 999956003 999946217 999949513 999978013 999980057 999984787 999999739 999958621 999974873 999973103 999981299 999958601 999947077 999955393 999998903 999982309 999973399 999982537 999943811 999980629 999961873 999948331 999982411 999970871 999977521 999956059 999962...

output:

170850
4797861
13292001
6612834
5961738
9894847
5454182
2899945
4798920
6711474
5798188
15057859
8195695
8388430
3120574
7594212
13895139
17770305
8304898
12142212
6553963
18172846
4040987
8745893
18506939
8215605
8734721
5336125
5248519
4946447
11415479
3436296
8949113
358650
4567953
13079566
49811...

result:

ok 100000 numbers

Test #12:

score: 6.66667
Accepted
time: 109ms
memory: 68204kb

input:

100000 1
1018081 1018081 1018081 1018081 1018081 1018081 1018081 1018081 1018081 1018081 1018081 1018081 1018081 1018081 1018081 1018081 1018081 1018081 1018081 1018081 1018081 1018081 1018081 1018081 1018081 1018081 1018081 1018081 1018081 1018081 1018081 1018081 1018081 1018081 1018081 1018081 101...

output:

200001

result:

ok 1 number(s): "200001"

Test #13:

score: 6.66667
Accepted
time: 1285ms
memory: 70384kb

input:

100000 100000
976437503 976437503 976437503 976437503 976437503 976437503 976437503 976437503 976437503 976437503 976437503 976437503 976437503 976437503 976437503 976437503 976437503 976437503 976437503 976437503 976437503 976437503 976437503 976437503 976437503 976437503 976437503 976437503 976437...

output:

863870
1800969
9388347
9000000
12757408
7651941
9830302
15248941
3184522
9149876
16193632
6239166
16809704
10590828
2417586
12258242
7777444
12840839
11872398
16779460
5395495
16224956
8425504
10730690
2777137
13191017
9353414
9351364
13037875
9354549
16395371
7986609
63491
9173855
5560164
8538717
1...

result:

ok 100000 numbers

Test #14:

score: 6.66667
Accepted
time: 595ms
memory: 69836kb

input:

100000 100000
545395769 698229127 723550517 941652221 626858299 518756747 903036853 824294437 585743237 874945717 904310507 666032317 840097187 688455731 794870227 518540471 931952779 912691687 608081101 733160171 780951869 818199391 560037593 884694211 703445957 667796851 540968429 672596527 696752...

output:

7696613
12701236
1936174
4247291
5240597
5187149
11564167
4880745
12607368
13682120
5616408
1266655
15358699
12847284
893111
5534349
17225477
18956963
2906631
3129169
8438033
14091495
11708544
9100206
1042008
16585054
17337179
13306010
15805184
527135
2249435
8138492
5804315
7141718
6747092
16420514...

result:

ok 100000 numbers

Test #15:

score: 6.66667
Accepted
time: 1144ms
memory: 70564kb

input:

100000 100000
779470561 353552809 583270801 221920609 672520489 156025081 424318801 917665849 308810329 572597041 272877361 164429329 106770889 609250489 107972881 815616481 233753521 347337769 135047641 470933401 451435009 297804049 417916249 896822809 919484329 417425761 290804809 344213809 170641...

output:

18949217
12711628
300978
1151614
798392
9382986
6709313
15492262
11617126
4442053
18132490
6834035
7811863
15128067
6193326
170115
15570571
12787708
18601907
17125392
17563859
5845927
10201773
5957993
2613898
7161887
12104160
15686408
14772379
18000946
3986667
8403875
1070882
9506786
4834413
1565509...

result:

ok 100000 numbers