QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#734928 | #9612. 月亮的背面是粉红色的 | 275307894a | 67 | 2122ms | 231080kb | C++14 | 2.9kb | 2024-11-11 16:04:17 | 2024-11-11 16:04:18 |
Judging History
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';
}
詳細信息
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'