洛谷P1445(数学+画柿子+线性筛)
2017-09-20 21:27
281 查看
这题kscla课间给我的,我依然一天想不出来。
题面
题意:给定n,求有多少对正整数(x,y)满足1x+1y=1n!
一步一步化简,有x+yxy=1n!
接着xy−x∗n!−y∗n!=0
然后掏出祖传的初中数学——因式分解,变成了(x−n!)(y−n!)=(n!)2
由于x,y都是正整数,故问题变成了(n!)2的约数个数。
若将(n!)2分解质因数(n!)2=pk11∗pk22∗pk33...
则ans=(k1+1)∗(k2+1)∗(k3+1)...
根据现学kscla的套路,我们可以枚举质数i,i在n!中出现的次数为∑k=1n⌊nik⌋由于每个数只可能是一个质数的k次方,故总复杂度是低于O(n)的。
然后就线性筛把素数找出来就搞定了,嘟嘟噜!
kscla大佬自己想到了一个炫酷的做法,点这里
题面
题意:给定n,求有多少对正整数(x,y)满足1x+1y=1n!
一步一步化简,有x+yxy=1n!
接着xy−x∗n!−y∗n!=0
然后掏出祖传的初中数学——因式分解,变成了(x−n!)(y−n!)=(n!)2
由于x,y都是正整数,故问题变成了(n!)2的约数个数。
若将(n!)2分解质因数(n!)2=pk11∗pk22∗pk33...
则ans=(k1+1)∗(k2+1)∗(k3+1)...
根据现学kscla的套路,我们可以枚举质数i,i在n!中出现的次数为∑k=1n⌊nik⌋由于每个数只可能是一个质数的k次方,故总复杂度是低于O(n)的。
然后就线性筛把素数找出来就搞定了,嘟嘟噜!
kscla大佬自己想到了一个炫酷的做法,点这里
#include <iostream> #include <fstream> #include <algorithm> #include <cmath> #include <ctime> #include <cstdio> #include <cstdlib> #include <cstring> using namespace std; #define mmst(a, b) memset(a, b, sizeof(a)) #define mmcp(a, b) memcpy(a, b, sizeof(b)) typedef long long LL; const int N=1001000; const LL mo=1000000007; LL n; LL prime ,num; bool b ; LL ans=1ll; int main() { cin>>n; for(LL i=2;i<=n;i++) { if(!b[i]) prime[++num]=i; for(int j=1;j<=num&&prime[j]*i<=n;j++) { b[i*prime[j]]=1; if(i%prime[j]==0) break; } } for(int i=1;i<=num;i++) { LL k=0; LL tu=prime[i],hy=prime[i]; while(tu<=n) { k=(k+n/tu)%mo; tu=tu*hy; } ans=ans*(2*k+1)%mo; } cout<<ans<<endl; return 0; }
相关文章推荐
- 洛谷3678:简单的数学题(画柿子+杜教筛)
- 机器学习中的数学(4)-线性判别分析(LDA), 主成分分析(PCA)
- 【数学】给定两个点线性求解给定x坐标对应的y坐标值
- 【搜索+枚举+数学思维】洛谷P1286 两数之和
- |洛谷|数学|P1403 约数研究
- 机器学习中的数学(4)-线性判别分析(LDA), 主成分分析(PCA)
- 洛谷 1403——[AHOI2005]约数研究(简单数学问题)
- 深度学习之二——相关数学基础(线性代数理论)
- 机器学习中的数学——主成分分析(PCA)、线性判别分析(LDA)
- 【AI_数学知识】线性代数
- 洛谷 P2788 数学1(math1)- 加减算式
- 数学之线性代数——奇异值分解SVD
- 机器学习数学基础--(三)线性代数之四个基本子空间
- 洛谷 P3708 koishi的数学题
- 机器学习数学心法之线性变换
- [洛谷P4232]无意识之外的捉迷藏-线性规划-纳什均衡
- CF402D Upgrading Array(贪心+数学+线性素数筛)
- 洛谷 1147——连续自然数和(简单数学问题)
- 【洛谷2022】 神奇数学题
- 洛谷 P3708 koishi的数学题