首页 > 其他 > 详细

UVA 11762 Race to 1 数学期望 概率 记忆化搜索

时间:2020-07-02 22:06:29      阅读:82      评论:0      收藏:0      [点我收藏+]

给出一个整数N 每次可以在不超过N的素数中随机选择以个P, 如果P是N的约数,则把N变成N/P ,否则N不变 。 问平均状况下需要多少次随机选择才能把N变为1 ? 

N<=1e6 

技术分享图片

 

 技术分享图片

 

 

int prime[maxn];
int vis[maxn];
double f[maxn];

int euler_sieve(int n) {
    int cnt = 0;
    for (int i = 2; i <= n; i++) {
        if (!vis[i]) prime[cnt++] = i;
        for (int j = 0; j < cnt; j++) {
            if (i * prime[j] > n) break;
            vis[i * prime[j]] = 1;
            if (i % prime[j] == 0) break;
        }
    }
    return cnt;
}

bool mp[maxn];
int p_cnt;

double dp(int x) {
    if (x == 1) return 0;
    if (mp[x]) return f[x];
    mp[x] = 1;
    double& ans = f[x];
    int g = 0, p = 0;
    ans = 0;
    for (int i = 0; i < p_cnt && prime[i] <= x; i++) {
        p++;
        if (x % prime[i] == 0) {
            g++;
            ans += dp(x / prime[i]);
        }
    }
    ans = (ans + p) / g;
    return ans;
}


int main() {    
    p_cnt = euler_sieve(1000005);
    int T;
    int n;
    int kase = 1;
    scanf("%d", &T);
    while (T--) {
        scanf("%d", &n);
        printf("Case %d: %.7f\n", kase++ ,dp(n));
    }
}

 

UVA 11762 Race to 1 数学期望 概率 记忆化搜索

原文:https://www.cnblogs.com/hznumqf/p/13227388.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!