题解 UVA12619 【Just Make A Wish】
观察题目范围,显而易见不能暴力做。(高精 python 党此句作废)
肉眼可见,矩形的个数就是因子的个数。
考虑打表,打出
for(register ll i=0;i<=1000000;i++){
fst[i]=i;
}
for(register ll i=2;i*i<=1000000;i++){
if(die[i]==false){
for(register ll j=i;i*j<=1000000;j++){
die[i*j]=true;
if(fst[i*j]==i*j){
fst[i*j]=i;
}
}
}
}
令当前数的因子数量为
令现在更新的值为
怎么枚举呢?
我有
考虑对
另外,还要更新
注意要取模,所以记得套上逆元!
scanf("%lld",&day);now=0;sum=1;
memset(some,0,sizeof(some));
for(register ll i=1;i<=day;i++){
scanf("%lld",&opt);flag=1;
if(opt<0){
flag=-1;opt=-opt;
}
while(opt>1){
sum*=find_inv(some[fst[opt]]+1);sum%=mod;
some[fst[opt]]+=flag;
sum*=some[fst[opt]]+1;sum%=mod;
opt/=fst[opt];
}
now+=sum;now%=mod;
}
printf("Case %lld: %lld\n",c,now);
AC 记录图好像很糊:
祝大家