欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

求约数个数的和

程序员文章站 2024-03-14 19:37:16
...

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

方法一:

#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;
}

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