求约数个数的和

    科技2024-10-15  21

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

    方法一:

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

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

    Processed: 0.013, SQL: 8