//输入一个数求这个数因子的和 //因子(不包含自己本身)和因数 (包含自己本身) /*
6%1=0
6%2=0
6%3=0
*/#include<stdio.h>intmain(){long n, s =0;int i;printf("请输入一个整数:");scanf("%ld",&n);for(i =1; i < n; i++){//一个数的因子(除自己本身以外)不可能大于这个数除以2+1 例如6的因子是 1 2 3 if(n % i ==0)//%进行取余
s=s+i;//s=s+i}printf("这个数的因子之和为:%ld", s);//ld代表输出的是一个长整型 return0;}
4.求一个数的因子之和进阶
//进阶求一个数的因子 因子是所有可以整除这个数的数,不包括这个数自身//因子的进阶求法/*
首先我们知道一个整数的因子不可能大于他本身的一半+1这样我们就可以缩小一半遍历的范围
但是有没有有没有更好的方法呢?
100的因数有:1和100、2和50、4和25、5和20、10和10。即成对的因数,
其中一个必然小于等于100的开平方,另一个大于等于100的开平方
那么也就是说我们只需要遍历这个整数的平方根以内的数字就可以求出一半的因子
然后我们根据求出的这一半的因子可以算出另外一半因子,这样就更加缩小了遍历的范围
*/#include<stdio.h>#include<math.h>//导入一个数学头文件 intmain(){long n, s =0;int i;scanf("%ld",&n);for(i =1; i <=sqrt(n); i++){//sqrt是求这个数的平方根例如4的平方根为2 if(n % i ==0)if(i == n / i)//这里为什么有一个判断呢,我们试想如果我们求9的因子会进入到哪个条件中?
s=s+i;else
s = s + i + n / i;}printf("%ld", s - n);return0;}