LightOJ 1038 Race to 1 Again 概率DP

Race to 1 Again LightOJ - 1038

对于一个整数 D D D,每次从他的因数中选一个 d d d,然后令 D = D / d D=D/d D=D/d,直到 D = 1 D=1 D=1 为止,问从 D D D 1 1 1 执行这样操作的期望次数。

E [ i ] E[i] E[i] 表示整数 i i i 变为 1 1 1 的期望次数, n n n 表示因子的总个数, a [ k ] a[k] a[k] 表示第 k k k 个因子,第 1 1 1 个因子 a [ 1 ] = 1 a[1]=1 a[1]=1,第 n n n 个因子 a [ n ] = i a[n]=i a[n]=i,则:

E [ i ] = 1 n ∑ k = 1 n ( E [ a [ k ] ] + 1 ) E [ i ] = E [ i ] n + 1 n ∑ k = 2 n − 1 E [ a [ k ] ] + 1 n − 1 n E [ i ] = 1 n ∑ k = 2 n − 1 E [ a [ k ] ] + 1 E [ i ] = 1 n − 1 ( ∑ k = 2 n − 1 E [ a [ k ] ] + n ) \begin{aligned} E[i]&=\frac{1}{n}\sum_{k=1}^n(E[a[k]]+1)\\ E[i]&=\frac{E[i]}{n}+\frac{1}{n}\sum_{k=2}^{n-1}E[a[k]]+1\\ \frac{n-1}{n}E[i]&=\frac{1}{n}\sum_{k=2}^{n-1}E[a[k]]+1\\ E[i]&=\frac{1}{n-1}(\sum_{k=2}^{n-1}E[a[k]]+n)\\ \end{aligned} E[i]E[i]nn1E[i]E[i]=n1k=1n(E[a[k]]+1)=nE[i]+n1k=2n1E[a[k]]+1=n1k=2n1E[a[k]]+1=n11(k=2n1E[a[k]]+n)

代码如下:

#include<iostream>
#include<cstdio>
//#define WINE
#define MAXN 100010
using namespace std;
double d[MAXN];
int n,j,T,iCase;
int main(){
#ifdef WINE
    freopen("data.in","r",stdin);
#endif
    d[0]=d[1]=0;
    for(int i=2;i<MAXN;i++){
        n=0;
        for(j=2;j*j<i;j++){
            if(i%j==0){
                n+=2;
                d[i]+=d[j];
                d[i]+=d[i/j];
            }
        }
        if(j*j==i){
            n+=1;
            d[i]+=d[j];
        }
        n+=2;// 1 and i
        d[i]+=n;
        d[i]/=(n-1);
    }
    scanf("%d",&T);
    while(T--){
        scanf("%d",&n);
        printf("Case %d: %.6lf\n",++iCase,d[n]);
    }
    return 0;
}

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值