LightOJ1298 One Theorem, One Year (欧拉函数dp)
题意:给你almost-K-First-P-Prime, 如果一个数x有k个质因子,且这k个质因子包含且仅包含前p个质数满足条件。 让你求Σφ(x);
思路:首先我们这p个因子一定要有,也就是剩下k-p个因子是什么了,剩下的因子每个都可以取前p个质数中的任意一个。想到这就有一种背包的感觉,然后在不知道状态转移方程的情况下,我们知道状态转移方程中的选还是不选怎么更新,就要用到欧拉函数更新了:
- φ(p)=p-1(p是质数)
- φ(p*a)=(p-1)*φ(a)(p是质数且p不能整除a)
- φ(p*a)=p*φ(a)(p是质数且p|a)
然后我就想到这。。。。开始搜索题解,对我来说太玄学了,看别人也没什么过渡,我是想不到。
dp[i][j]直接存的是答案,当一个质数没出现过,用到性质2,dp[i][j] = dp[i-1][j-1] * (prime[j] - 1) , 一个质数出现过可以用性质3,dp[i][j] += dp[i-1][j] * prime[j]。
#include <bits/stdc++.h>
#define ll long long
#define INF 0x3f3f3f3f3f3f3f3f
#define met(a, b) memset(a, b, sizeof(a))
using namespace std;
const int N = 4000;
const ll mod = 1000000007;
bool vis[N];
ll prime[N], dp[505][505];
void get_prime(){
int pos = 0; vis[1] = 1;
for(ll i = 2; i <= 3600; i++){
if(!vis[i]) prime[++pos] = i;
for(ll j = 1; j <= pos && prime[j]*i <= 3600; j++){
vis[i*prime[j]] = 1;
if(i%prime[j] == 0) break;
}
}
} void init(){
dp[0][0] = 1;
for(int i = 1; i <= 500; i++){
for(int j = 1; j <= i; j++){
dp[i][j] += dp[i-1][j-1] * (prime[j] - 1) % mod; //这个质数第一次被选
if(i-1 >= j) dp[i][j] = (dp[i][j]+dp[i-1][j]*prime[j])%mod; //这个质数之前选过
}
}
} int main(){
get_prime();
init();
int T, cas = 0; cin >> T;
while(T--){
int k, p;
cin >> k >> p;
printf("Case %d: %lld\n", ++cas, dp[k][p]);
}
return 0;
}
LightOJ1298 One Theorem, One Year (欧拉函数dp)的更多相关文章
- LightOJ1298 One Theorem, One Year(DP + 欧拉函数性质)
题目 Source http://www.lightoj.com/volume_showproblem.php?problem=1298 Description A number is Almost- ...
- hdu2588 GCD (欧拉函数)
GCD 题意:输入N,M(2<=N<=1000000000, 1<=M<=N), 设1<=X<=N,求使gcd(X,N)>=M的X的个数. (文末有题) 知 ...
- BZOJ 2705: [SDOI2012]Longge的问题 [欧拉函数]
2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 2553 Solved: 1565[Submit][ ...
- BZOJ 2818: Gcd [欧拉函数 质数 线性筛]【学习笔记】
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 4436 Solved: 1957[Submit][Status][Discuss ...
- COGS2531. [HZOI 2016]函数的美 打表+欧拉函数
题目:http://cogs.pw/cogs/problem/problem.php?pid=2533 这道题考察打表观察规律. 发现对f的定义实际是递归式的 f(n,k) = f(0,f(n-1,k ...
- poj2478 Farey Sequence (欧拉函数)
Farey Sequence 题意:给定一个数n,求在[1,n]这个范围内两两互质的数的个数.(转化为给定一个数n,比n小且与n互质的数的个数) 知识点: 欧拉函数: 普通求法: int Euler( ...
- 51Nod-1136 欧拉函数
51Nod: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1136 1136 欧拉函数 基准时间限制:1 秒 空间限制: ...
- 欧拉函数 - HDU1286
欧拉函数的作用: 有[1,2.....n]这样一个集合,f(n)=这个集合中与n互质的元素的个数.欧拉函数描述了一些列与这个f(n)有关的一些性质,如下: 1.令p为一个素数,n = p ^ k,则 ...
- FZU 1759 欧拉函数 降幂公式
Description Given A,B,C, You should quickly calculate the result of A^B mod C. (1<=A,C<=1000 ...
- hdu 3307 Description has only two Sentences (欧拉函数+快速幂)
Description has only two SentencesTime Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...
随机推荐
- vue3使用swiper 完整步骤
注意: 使用之前请确定使用的swiper版本,避免走一些不必要的弯路(笔者踩过来的)本文采用的是vue3.0.swiper^8.1.0. 1.安装依赖 npm install swiper 2.vue ...
- PostScript语言教程(四、程序变量使用)
4.1.变量定义 POSTSCRIPT 变量 变量的定义是将比那两名和值用def进行关联类似 /ppi 75 def %将ppi定义为75 /ppi ppi 1 add def %将ppi + 1的值 ...
- 10 soundJs 初体验
最近想做一个h5的小游戏所以用上了soundjs. 还在开发中 http://www.hetenglife.com/mouse/game.html 刚刚把控制做完. 首先是要导入这个文件 <s ...
- Tesstwo9.1.0配置步骤
一,配置步骤 环境:Tesstwo9.1.0+Android10(华为)+Android11(模拟器) 1.查看tess-two的最新版本(GitHub - rmtheis/tess-two: For ...
- 在 Linux 上使用《算法》第4版官网中的 algs4.jar 包
使用<算法>第4版( Algorithms Fourth Edition ) 中的 algs4.jar 包 下载 algs4.jar 官网网址: https://algs4.cs.prin ...
- seleniumUI自动化学习记录
2019.2.9 尝试了一个启动浏览器并打开指定网址的程序: 这里首先要注意的就是浏览器的版本和selenium jar包的版本必须符合才行,不然会报错 2019.9.16 必须要下载相应的chrom ...
- ffmpeg安装教程
1 下载所需要的软件 mkdir /usr/local/soft cd /usr/local/soft wget https://www.ffmpeg.org/releases/ffmpeg-snap ...
- Pycharm 2021.3 的激活破解教程,永久激活,亲测有效
关注公众号回复 pycharm 即可获取激活脚本和教程 更新时间 2022年1月20日. 不定时更新 激活码可在公众号中回复[激活码]获取.
- ABAP开发面向对象---类
今日学习ABAP面向对象里面的类,关于构造,继承,实现. 踩坑点:类有抽象的方法,类本身也需要是抽象的,故需要在类申明里面加上ABSTRACT关键字 学习资料为B站翱翔云天老师的 1 CLASS zc ...
- MPC
Just for anyone searching for code. I found it here: https://drive.google.com/drive/folders/0BzLEHBD ...