求约数个数的和

Posted Jozky86

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求约数个数的和相关的知识,希望对你有一定的参考价值。

今天一下午都在研究约数的各种性质。。。
求约数个数的和可以用线性筛的方式,线性求解的方式,这应该是最快的
[数论]线性筛——约数个数与约数和
除此之外还有代码更简便方法:
对应的例题

方法一:

#include <iostream>    
using namespace std;
int OneToNumGcdCount(int num) 
	int  ans = 0;
	for (int i = 1; i <= num; i++) 
		ans += num / i;
	
	return ans;

int main()

    int t1, t2, t;
	cin >> t1 >> t2 ;
	t = OneToNumGcdCount(t2)- OneToNumGcdCount(t1-1);
	cout << t;
    return 0;



方法二:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,m;
ll get(ll n)
	long long ans=0, t=sqrt((double)(n));
    for(int i=1; i<=t; i++)
            ans += n/i;
       ans = ans*2-t*t;
    return ans;

int main()
	scanf("%lld%lld",&n,&m);
	cout<<get(m)-get(n-1)<<endl;
	return 0;


代码二的时间复杂度更低,个人感觉代码二应该是代码一的优化版本

以上是关于求约数个数的和的主要内容,如果未能解决你的问题,请参考以下文章

[洛谷1390]公约数的和

牛客练习赛8

P1390--公约数的和

hdu 1215 求约数和 唯一分解定理的基本运用

数论考试题(b) 求约数的约数的最大个数

P1390 公约数的和