求一个数的因子个数和因子数之和

方法一:朴素算法:O(n)。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int get_num(int n){
 4     int num=0;
 5     for(int i=1;i<=n;++i)
 6         if(n%i==0)num++;
 7     return num;
 8 }
 9 int get_sum(int n){
10     int tot=0;
11     for(int i=1;i<=n;++i)
12         if(n%i==0)tot+=i;
13     return tot;
14 }
15 int main(){
16     int n;
17     while(cin>>n){
18         cout<<get_num(n)<<endl;//求n的因子个数
19         cout<<get_sum(n)<<endl;//求n的因子数之和
20     }
21     return 0;
22 }

方法二:公式法:O(√n)。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int get_num(int n){
 4     int tot=1;
 5     for(int i=2;i*i<=n;++i){
 6         if(n%i==0){
 7             int x=0;
 8             while(n%i==0){
 9                 n/=i;
10                 x++;
11             }
12             tot*=(x+1);
13         }
14     }
15     if(n>1)tot*=2;
16     return tot;
17 }
18 int get_sum(int n){
19     int tot=1;
20     for(int i=2;i*i<=n;i++){
21         if(n%i==0){
22             int mul=1;
23             while(n%i==0){
24                 n/=i;
25                 mul*=i;
26             }
27             tot*=(mul*i-1)/(i-1);
28         }
29     }
30     if(n>1)tot*=(n+1);
31     return tot;
32 }
33 int main(){
34     int n;
35     while(cin>>n){
36         cout<<get_num(n)<<endl;//求n的因子个数
37         cout<<get_sum(n)<<endl;//求n的因子数之和
38     }
39     return 0;
40 }

猜你喜欢

转载自www.cnblogs.com/acgoto/p/9693207.html
今日推荐