题目描述
小蓝开了一家宠物店,最近有一种 X
病毒在动物之间进行传染,小蓝为了以防万一打算购买测试剂对自己的宠物进行病毒感染测试。
为了减少使用的测试剂数目,小蓝想到了一个好方法:将 N
个宠物平均分为若干组,使得每组恰好有 K
只宠物,这样对同一组的宠物进行采样并混合后用一个试剂进行检测,如果测试结果为阴性则说明组内宠物都未感染 X
病毒;如果是阳性的话则需要对组内所有 K
只宠物单独检测,需要再消耗 K
支测试剂(当 K=1
时,就没必要再次进行单独检测了,因为组内只有一只宠物,一次检测便能确认答案)。
现在我们已知小蓝的宠物被感染的概率为 p
,请问 K
应该取值为多少才能使得期望的测试剂的消耗数目最少?
如果有多个答案输出最小的 K
。
java 代码
import java.util.*;
import java.io.*;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
double p=sc.nextDouble();
int bk=1;
double e=n;
for(int k=1;k<=n;k++){
if(n%k==0){
double ei=n*(1-Math.pow(1-p,k))+n/k;
if(ei<e){
e=ei;
bk=k;
}
}
}
System.out.println(bk);
}
}