QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#744242 | #7493. 此时此刻的光辉 | TheZone | 100 ✓ | 1285ms | 71092kb | C++20 | 4.2kb | 2024-11-13 21:17:05 | 2024-11-13 21:17:07 |
Judging History
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