写这题纯属骗分
代码这个数据过不来
17 1960
1
4913
提交的代码输出 0
代码:(加了注释的哪行是调试的,调试时0懒得输出了)
#include<cstdio>
#include<math.h>
using namespace std;
const long long MOD=998244353;
long long quick_pow(long long a,long long b,const long long mod){
long long res=1;
a%=mod;
while(b>0){
if(b&1)
res=res*a%mod;
a=a*a%mod;
b>>=1;
}
return res%mod;
}
long long a,b,c,x,n;
double mylog(long long p,long long q){
return log(q)/log(p);
}
int main(){
printf("%.2lf",floor(3.000));
scanf("%lld %lld %lld %lld",&a,&b,&c,&c);
scanf("%lld",&n);
long long aaa=1;
for(int i=1;i<=b;i++)
aaa*=a;
while(n--){
scanf("%lld",&x);
if(x==1){
printf("0 ");
continue;
}
if(mylog(a,x)-floor(mylog(a,x))>1e-4){
printf("%.10lf %.10lf",floor(mylog(a,x)),mylog(a,x));//////////////////////
continue;
}
if(abs(mylog(a,x)-b)<=1e-8){
printf("1 ");
continue;
}
printf("%lld ",quick_pow(2,b-floor(mylog(a,x))-1,MOD));
}
return 0;
}
输出为:
2.0000000000 3.0000000000
3 怎么会向下取整变成 2 ?