zoukankan      html  css  js  c++  java
  • lightoj 1038 Race to 1 Again

      题意:给一个数,用这个数的因数除以这个数,直到为1时,求除的次数的期望。

      设一个数的约数有M个,E[n] = (E[a[1]]+1)/M+(E[a[2]]+1)/M+...+(E[a[M]]+1)/M

      一个数最大的约数是它自己。

      则有,E[n] = (E[a[1]]+1)/M+(E[a[2]]+1)/M+...+(n+1)/M

      (M-1)*E[n]=E[a[1]]+E[a[2]]+...+E[a[M-1]]+M

    #include<stdio.h>
    #include<math.h>
    #define maxn 100010
    
    double dp[maxn];
    void Init()
    {
        dp[1]=0;
        for(int i=2;i<maxn;i++)
        {
            double sum=0;
            int cnt=0;
            for(int j=1;j<=sqrt(i*1.0);j++)
                if(i%j==0)
                {
                    sum+=dp[j];cnt++;
                    if(j!=i/j)
                    {
                        sum+=dp[i/j];cnt++;
                    }
                }
            sum+=cnt;
            dp[i]=sum/(cnt-1);
        }
    }
    int main()
    {
        Init();
        int T,n,cas=1;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d",&n);
            printf("Case %d: %lf
    ",cas++,dp[n]);
        }
        return 0;
    }
  • 相关阅读:
    迷 宫
    车厢调度
    快速幂
    2804 最大最小数质因数
    3022 西天收费站
    2291 糖果堆
    1464 装箱问题 2
    Exists/In/Any/All/Contains操作符
    window.onscroll
    zIndex 属性设置元素的堆叠顺序。
  • 原文地址:https://www.cnblogs.com/yongren1zu/p/3249239.html
Copyright © 2011-2022 走看看