容斥原理(模板)
2016-09-22 11:12
211 查看
模板:递归版(好理解)
其实打表是更慢的而且很可能根本打不下,因为打表实际上是依次枚举所有的方案,如果被除数较多,就无法枚举方案数了
//容斥原理,结果存在sub中
long long sub = 0;
void dfs(int id,int deep,long long sum)
{
// cout<<sum<<endl;
long long temp;
for(int i = id; i < primenum; i ++)
{
temp = sum * prime[i];
// cout<<temp<<endl;
if(temp > n) //避免溢出
{
return;
}
if(deep % 2 == 0)
{
sub -= n / temp;
}
else
{
sub += n / temp;
}
dfs(i + 1,deep + 1,temp);
}
}
其实打表是更慢的而且很可能根本打不下,因为打表实际上是依次枚举所有的方案,如果被除数较多,就无法枚举方案数了
//容斥原理,结果存在sub中
long long sub = 0;
void dfs(int id,int deep,long long sum)
{
// cout<<sum<<endl;
long long temp;
for(int i = id; i < primenum; i ++)
{
temp = sum * prime[i];
// cout<<temp<<endl;
if(temp > n) //避免溢出
{
return;
}
if(deep % 2 == 0)
{
sub -= n / temp;
}
else
{
sub += n / temp;
}
dfs(i + 1,deep + 1,temp);
}
}
相关文章推荐
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- C#递归算法之分而治之策略
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- C#算法之大牛生小牛的问题高效解决方法
- C#算法函数:获取一个字符串中的最大长度的数字
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- 经典排序算法之冒泡排序(Bubble sort)代码
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法