1 - 求n的因子和

因子和函数σ定义为整数n的所有正因子之和,记为σ(n)  它是一个积性函数
首先对n进行因子分解 (因子分解代码附后)
n = p1^a1 * p2^a2 * ~~~ * px ^ ax

σ(n) =((p1^(a1+1)-1)/(p1-1) * ((p2^(a2+1)-1)/(p2-1) * .... * ((pj^(aj+1)-1)/(pj-1)) = Π(j=1 -> x) (pj^(aj+1)-1)/(pj-1)
    Π:表示乘积的符号

举个例子: 12 = 2^2 * 3^1 = p1^a1 * p2^a2     (p1 = 2; a1 = 2; p2 = 3; a2 = 1)
    而 12的因子有 1 2 3 4 6 12
    1 = 2^0 * 3^0
    2 = 2^1 * 3^0
    3 = 2^0 * 3^1
    4 = 2^2 * 3^0
    6 = 2^1 * 3^1
    12 = 2^2 * 3^1
    左边加起来 = 1+2+3+4+6+12 =  28 = (2^0 + 2^1 + 2^2) * (3^0 + 3^1) = 右边

(2^0 + 2^1 + 2^2)  是一个首项为1,公比为2的等比数列 
    (3^0 + 3^1) 是一个首项为1 , 公比为3的等比数列 
    因为我们对n进行算数分解 所以不可能出现公比为1的情况
    根据等比数列求和公式  (1 - q^n) / (1-q)   
    分子分母同时乘-1    (q^n - 1) / (q - 1)
    因为第一项是从0开始的  所以 对于pi ^ ai 它的前n项和为 (pi^(ai+1) - 1) / (pi - 1)

所以 σ(n) = Π(i=1 -> x) (pi^(ai+1)-1)/(pi-1)

2 - 求n的因子个数

因子个数函数τ定义为正整数n的所有正因子个数,记为τ(n)

τ(n) = (b1+1) * (b2+1) * ... * (bs+1) = Π(i=1 -> s) (bi + 1)

举个例子~~~
首先还是对n进行因子分解
n = 12
则 12 = 2^2 * 3^1
// 12 的因子有 1 2 3 4 6 12 首先2对因子的贡献有3个 3对因子的贡献有2个 (这里有问题 有时间了在改)
所以 τ(n) = (b1+1) * (b2+1)

3 - 因子分解

//n等于1的时候无法分解
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
# define mst(a,b) memset(a,b,sizeof(a))
int prime[100010]; // 存素数
bool vis[100010];
int numprime; // 素数表的个数
void doprime(int n){mst(vis, 0);mst(prime, 0);for(int i = 2; i <= n; i++){if(!vis[i]){prime[numprime++] = i;}for(int j = 0; j <numprime && i *prime[j] <= n; j++){vis[i * prime[j]] = true;if(i % prime[j] == 0){break;}}}
}
LL a[1060]; /// 保存素因子
int b[1060]; /// 保存素因子的个数
int cnt;
void suanshu(long long n)
{cnt=0;   /// 从0开始的memset(a,0,sizeof(a));memset(b,0,sizeof(b));for(int i = 0; i < numprime && prime[i] * prime[i] <= n; i++){if(n % prime[i] == 0){a[cnt] = prime[i];while(n % prime[i] == 0){b[cnt]++;n /= prime[i];}cnt++;}}if(n!=1){a[cnt] = n;b[cnt++] = 1;}
}int main(){doprime(100010);int n;while(cin>> n){suanshu(n);for(int i = 0; i < cnt; i++){cout<<a[i]<<" ^ "<< b[i]<<" ";}cout<<endl;}return 0;
}

sqrt(n)算法:

#include<bits/stdc++.h>
using namespace std;#define e exp(1)
#define pi acos(-1)
#define mod 1000000007
#define inf 0x3f3f3f3f
#define ll long long
#define ull unsigned long long
#define mem(a,b) memset(a,b,sizeof(a))
int gcd(int a,int b){return b?gcd(b,a%b):a;}int main()
{int T;scanf("%d",&T);while(T--){ll n;scanf("%lld",&n);int sum=0;n--;for(ll i=1; i<=sqrt(n); i++){if(n%i==0&&n/i==i)sum++;else if(n%i==0&&n/i!=i)sum+=2;}printf("%d\n",sum);}return 0;
}

3 - 求1到n的因子和的和

1.

ll get(ll x,ll n){ll a=n/x;ll b=n/(x+1)+1;return (a+b)*(a-b+1)/2*x;
}
ll x(ll n)
{ll ans=0;for(ll i=1;i*i<=n;i++){ll a=i;ll b=n/a;ans+=get(a,n);if(b!=a) ans+=get(b,n);}if(n==0) ans=0;return ans;
}

2.这个不好口述,尽量解释清楚
还是以12为例
则 i    1 2 3 4 5 6 7 8 9 10 11 12
因子    1 1 1 1 1 1 1 1 1 1 1 1
        2 3 2 5 2 7 2 9 2 11 2
        4 3 4 5 3
6 8 10 6
12
则 ans = σ(1)  + σ(2) + ---- + σ(12)
   = 12*1 + 6*2 + 4*3 +  3*4 + 2*5 + 2*6 +  1*7 + 1*8 + 1*9 + 1*10 + 1*11 + 1*12
   =  Σ(1 -> n) (n/i) * i     注: 这里的/ 是整除的意思
然后我们这样看
ans = 12*1 + 6*2 + 4*3 + 3*4 + 2*(5+6) + 1*(7+8+9+10+11+12)
则对于每一个 n/i 都有一个范围
n/i 范围[l, r]        当前n/i 在范围内 对ans的贡献是
12  [1,1]        12 * 1
6 [2,2] 6 * 2
4 [3,3] 4 * 3
3 [4,4] 3 * 4
2 [5,6] 2 * (5 + 6)
1   [7,12] 1 * (7 + 8 + --- + 12)      对于 7+--+8 等差数列求和 n(a1+an)/2

可以发现 每一个l等于上一个r+1 而r = n/(n/l)  (这里可能不好想-^-^-也就是积性函数(可看积性函数的一些函数),就是数论的分块,我是这么想的,)
则代码。。。
(j-i+1)*(i+j)/2相当于n(a1+an)/2


ll x(ll n)
{ll ans=0,j;for(ull i=1;i<=n;i=j+1){j=n/(n/i);ans+=(j-i+1)*(i+j)/2*(n/i);}return ans;
}

4 - 求1到n的因子个数的和

还是以12为例
i    1 2 3 4 5 6 7 8 9 10 11 12
因子个数    1 2 2 3 2 4 2 4 3 4 2 6
ans = τ(1) + τ(2) + τ(3) + τ(4)+ τ(5)+ τ(6)+ τ(7)+ τ(8)+ τ(9)+ τ(10)+ τ(11) + τ(12)
= 1 + 2 + 2 +3 + 2 + 4 + 2 + 4 + 3 + 4 + 2 + 6
= 1 * 1 + 2 * 5 + 3 * 2 + 4 * 3 + 6 * 1
= Σ(1 -> n) (n/i)
代码:

// light oj 1245
# include <bits/stdc++.h>
using namespace std;
typedef long long LL;
LL X(LL n)
{LL l, r;LL ans = 0;for( l = 1; l <= n; l = r+1){r = n/(n/l);ans += n/l * (r - l + 1);}return ans;
}
int main(){int t;cin>>t;int Case =1;while(t--){LL x;cin>> x;printf("Case %d: %lld\n",Case++,X(x));}
}

因子和,因子数,1到n的因子和,1到n的因子数(积性函数)相关推荐

  1. zcmu2012(积性函数---因子和)

    2012: 因子和 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 38  Solved: 12 [Submit][Status][Web Board] ...

  2. 电子和计算机工程密歇根大学,美国密歇根大学电子和计算机工程系系主任:微纳传感器的未来畅想...

    物联网的发展离不开传感器的运用,近日密歇根大学电子和计算机工程系系主任.美国国家自然基金委员会国家纳米技术研发协会密歇根实验室主任.美国电子和计算机工程系系主任协会主席Khalil Najafi受邀接 ...

  3. 「Note」Math not for OI

    大家以我为戒 千万不要这么学 oi ( todolist 会越鸽越长的 高代那部分莫名其妙写了一大堆 其实我写完之后也没复习过几遍.. 而且千万不要抄看起来很厉害实际上也很厉害的东西抄爽了,, 更不要 ...

  4. 【算法专题】积性函数

    [参考] ★浅谈一类积性函数的前缀和 by skywalkert 任之洲数论函数.pdf 论逗逼的自我修养之寒假颓废记 by jiry_2 杜教筛 [学习笔记][更新中] by Candy? [变化技 ...

  5. 线性求逆元模板_ACM 数论基本模板

    ACM 数论基本模板 1.欧几里得 求最大公约数,最小公倍数 (1)递归的写法:int gcd(int a,int b) {return b?gcd(b,a%b):a;} (2)辗转相除法: int ...

  6. 因式分解,算术基本定理,积性函数(POJ 1452 Happy2004)

    积性函数:是指对于所有互质的整数a和b有性质f(ab) = f(a) * f(b) 算术基本定理:任何一个大于1的正整数都能唯一分解为有限个质数的乘积,即N = p1^x1 * p2^x2 * p3^ ...

  7. 积性函数与Dirichlet卷积 学习小记

    前言 首先感谢 XHM 大佬的悉心指导,我懂得了不少~. 链一下他关于这方面的见解.博客--XHM 的Dirichlet卷积 学习小记 一些定义 回归正题,这次我学习了一下狄利克雷卷积方面的知识. 先 ...

  8. 数学--数论--莫比乌斯函数

    定义: 默比乌斯函数或缪比乌斯函数是指以下的函数 : μ(n)={1若n=1;(−1)k若n无平方因子数,且n=p1∗p2....∗pk;0若n有平方因子数μ(n)= \left\{ \begin{a ...

  9. 模板:莫比乌斯反演(数论)

    文章目录 前言 整除分块 代码 积性函数 线性筛 狄利克雷卷积 莫比乌斯反演 trick 所谓莫比乌斯反演,就是莫比乌斯进行的反演 (逃) 前言 在一些需要整除的式子和 gcd⁡,lcm⁡\gcd,\ ...

最新文章

  1. 程序员都该懂点 HTTP
  2. tensorflow函数API总结
  3. 对象分割--Instance-sensitive Fully Convolutional Networks
  4. nginx php动态编译加载模块.
  5. C# List集合转Json字符串示例代码
  6. linux 报错 ip_conntrack version 2.4 (8192 buckets, 65536 max) - 304 bytes per conntrack 解决方法
  7. C语言 | 为什么写这三行代码
  8. MaxCompute预付费资源监控工具-CU管家使用教程
  9. nginx与PHP配置
  10. 中兴、深度、中国电子打造 UOS 统一操作系统:开源、支持龙芯和海思等国产处理器
  11. Strezov Sampling Trombone Ensemble Mac(长号合奏音色库)
  12. List分组 用于客服对话分组场景
  13. idea创建svn分支
  14. java web学习步骤,javaweb学习路线有哪些?如何学习?
  15. 数据分析可视化图表mysql_50个最有价值的数据可视化图表
  16. 跳转页面 bscroll 无法无法从顶部滚动
  17. android 点击按钮打开浏览器网页
  18. 宝付浅谈物流无人机发展历程
  19. Python晋级语法
  20. 基于eclipse的android项目实战—博学谷(新功能四)签到

热门文章

  1. 【BZOJ】3139: [Hnoi2013]比赛
  2. Django里自定义用户登陆及登陆后跳转到登陆前页面的实现
  3. ⑧javaWeb之在例子中学习(过滤器Filter)
  4. Hough Transform 的算法思想
  5. Linux下VTK、ITK的安装及运行 转载
  6. python如何调用c编译好可执行程序
  7. 详解平衡二叉树(AVL),红黑树与平衡二叉树的区别
  8. php zval_copy_static_var(),深入理解 PHP7 中全新的 zval 容器和引用计数机制
  9. 在caffe上fine-tuning网络
  10. 高斯混合模型 GMM