求某一个范围内完数的个数
如果一个数等于它的因子之和,则称该数为完数,例如“6”的因子为1,2,3,而6=1+2+3,因此6是完数
问题分析:
假设一个数d,然后计算出它的每个因子,用到for循环,假如是a,b,c,然后进行一个判断如果a+b+c=d,就说明d是完数,应该要用到两层循环,最外层循环从2开始,一直到d,内层循环从1开始,一直到a,然后开始取余,如果等于0,就说明是它的因子。
也就是
for (a = 2; a <= d; a++) { c = 0;//这里是要循环时c的值为0 for (b = 1; b < a; b++) { if (a % b == 0)//看看b是不是a的因子 c += b; }
if语句判断一下,这个if语句在for循环里,每个完数都会输出
if (a == c) { cout << a<<endl;//直接输出a }
完整的就是
#include<iostream> using namespace std; int main() { int a, b, c, d;//a选定数范围,b除数范围,c是和 cin >> d;//d输入范围的上限 for (a = 2; a <= d; a++) { c = 0; for (b = 1; b < a; b++) { if (a % b == 0)//判断是不是因子 c += b; } if (a == c)//因子的和与原数的大小比较 { cout << a<<endl; } } return 0; }