系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
《数据结构基础》c语言版 第2版,Ellis Horowitz著,朱仲涛译
1.3节,page14,习题6
一、题目描述
给定正整数n,判定n是否等于其因子的总和,即判定n是否等于所有t的和,t可以整除n,1<=t<n
二、c++代码
1.遍历法
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n;
printf("please enter the number n:\n");
scanf("%d",&n);
int sum=0;
vector<int > factor;
for(int i=1;i<n;i++)
{
if(n%i==0)
factor.push_back(i);
}
for(int i=0;i<factor.size();i++)
sum+=factor[i];
printf("the original number is:%d,the factor sum is:%d\n",n,sum);
if(n==sum)
printf("the factor sum is equal to number n");
else
printf("the factor sum is not equal to number n");
return 0;
}
2.扩充-正整数的因子数和因子和
正整数的因子个数
代码如下:
#include<iostream>
using namespace std;
int main()
{
int n;
printf("enter the value:\n");
scanf("%d",&n);
int num=1,a;
for(int i=2;i*i<=n;i++)
{
if(n%i==0){
a=0;
while (n%i==0){
a++;
n/=i;
}
num*=(1+a);
}
}
if(n>1)
num*=2;
printf("the factor num is:%d\n",num);
return 0;
}
求正整数的因子和
代码如下:
#include<iostream>
using namespace std;
int main()
{
int n;
printf("enter the value:\n");
scanf("%d",&n);
int sum=1,a;
for(int i=2;i*i<=n;i++)
{
if(n%i==0){
a=1;
while (n%i==0){
a*=i;
n/=i;
}
sum*=(a*i-1)/(i-1);
}
}
if(n>1)
sum*=(1+n);
printf("the factor num is:%d\n",sum);
return 0;
}