求约数个数的和
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;
代码二的时间复杂度更低,个人感觉代码二应该是代码一的优化版本
以上是关于求约数个数的和的主要内容,如果未能解决你的问题,请参考以下文章