uva11762(期望)
来源:互联网 发布:轴承型号大全软件 编辑:程序博客网 时间:2024/04/29 23:28
题意:
给出一个n,随机选一个比n小的素数i,如果i能被n整除;n/=i;否则n=n;
问n除到1的期望次数;
思路:
先打素数表;
然后
f[n] = 1/p f[a0] + 1/p f[a1].....+ 1其中p是小于n的素数个数,ai表示,如果这个素数能被n整除,ai = n/这个素数,否则ai = n;
然后用这个公式递推就行了;
#include <cstdio>#include <cstring>#include <cmath>const int N = 1000005;int vis[N], num[N], prime[N], n;double f[N];void init() {int k = 0;memset(vis, 0, sizeof(vis));memset(prime, 0, sizeof(prime));memset(num, 0, sizeof(num));for(int i = 2; i < N; i++) {num[i] = num[i - 1];if(!vis[i]) {num[i]++;prime[k++] = i;vis[i] = 1;for(int j = 2; i * j < N; j++) {vis[i * j] = 1;}}}}double dfs(int x) {if(vis[x])return f[x];vis[x] = 1; int s = 0;double p = 1.0 / num[x];double sum = 0;for(int i = 0; i < num[x]; i++) {if(x % prime[i] == 0) {sum += dfs(x / prime[i]);s++;} }return f[x] = (sum + num[x]) / s;}int main(){init();memset(vis, 0, sizeof(vis));vis[1] = 1, f[1] = 0;int t;int cas = 1;scanf("%d", &t);while(t--) {scanf("%d", &n);printf("Case %d: %.10lf\n",cas++, dfs(n));}return 0;}
0 0
- uva11762(期望)
- [UVA11762] Race to 1 && 数学期望
- Uva11762 Race to 1 数学期望
- UVa11762
- uva11762 Race to 1 概率dp求期望+记忆化搜索
- Race to 1 UVA11762
- UVA11762 Race to 1
- UVa11762 Race to 1
- Uva11762 Race to 1
- uva11762 Race to 1
- 期望
- 期望
- 期望
- 期望
- 期望
- 期望
- 期望
- 新年新期望
- 年轻程序员需要学习的5大经验
- CAS4.0集成OpenLdap返回用户属性
- webrtc(2):Centos6 安装 stun/turn服务
- Qt4静态编译软件,vs属性设置
- 单元测试-Xcode6以上
- uva11762(期望)
- Redis学习笔记---字典类型
- error: jump to case label
- 搭建Spring MVC环境进行简单的增、删、改、查(二)
- linux常用目录作用
- 构造函数,拷贝构造函数,析构函数
- .Net Sql Server use informix_odbc tips
- redis的PHP封装
- android 5.0+原生质设计,cardview、Recyclerview、百分比布局PercentRelativeLayout简单使用