zoukankan      html  css  js  c++  java
  • LightOJ 1038

    题意:http://www.lightoj.com/volume_showproblem.php?problem=1038

    题意:给一个数,用这个数的因数除以这个数,直到为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+...+(E[n]+1)/M

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

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<iostream>
    #include<queue>
    #include<map>
    #include<vector>
    #include<math.h>
    #include<string>
    using namespace std;
    #define INF 0x3f3f3f3f
    #define LL long long
    #define N 100006
    #define Lson rood<<1
    #define Rson rood<<1|1
    double dp[N];
    void Q()
    {
        dp[1]=0;
        for(int i=2;i<N;i++)
        {
            double sum=0;
            int ans=-1;
            for(int j=1;j<=sqrt(i);j++)
            {
                if(i%j==0)
                {
                    sum+=dp[j];ans++;
                    if(j!=i/j)
                    {
                        sum+=dp[i/j];ans++;
                    }
                }
            }
            sum+=ans+1;
            dp[i]=sum/ans;
        }
    }
    int main()
    {
        Q();
        int T,t=1,n;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d",&n);
            printf("Case %d: %.10f
    ",t++,dp[n]);
        }
        return 0;
    }
  • 相关阅读:
    每日总结
    团队冲刺9
    团队冲刺8
    团队冲刺7
    团队冲刺6
    团队冲刺5
    团队冲刺4
    团对冲刺3
    团队冲刺2
    每日博客
  • 原文地址:https://www.cnblogs.com/a719525932/p/7803043.html
Copyright © 2011-2022 走看看