18.求1000以内的完数

一个数如果恰好等于他的因字数之和,这个数就称为“完数”,例如,6的因子为1,2,3,而6=1+2+3,因此6是一个“完数”

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int main()
 4 {
 5     int k1,k2,k3,k4,k5,k6,k7,k8,k9,k10;
 6     int i,a,n,s;
 7     for(a=2; a<=1000; a++)  //a是2-1000之间的整数,检查它是否为完数
 8     {
 9         n = 0;  //用于累计a的因子个数
10         s = a;  //s用于存放尚未求出的因子之和,开始对时候等于a
11         for(i=1; i<a; i++)//检查i是否为a的因子
12             if(a%i==0)  //如果i是a的因子
13             {
14                 n++;     //n加1,表示新找到一个因子
15                 s = s-i;  //s减去已找到的因子,s的新值是尚未求出的因子数之和
16                 switch(n)  //将找到的因子赋给k1-k10
17                 {
18                 case 1:
19                     k1 = i;    //找到第一个因子赋给k1
20                     break;
21                 case 2:
22                     k2 = i;   //找出第2个因子赋给k2
23                     break;
24                 case 3:
25                     k3 = i;
26                     break;
27                 case 4:
28                     k4 = i;
29                     break;
30                 case 5:
31                     k5 = i;
32                     break;
33                 case 6:
34                     k6 = i;
35                     break;
36                 case 7:
37                     k7 = i;
38                     break;
39                 case 8:
40                     k8 = i;
41                     break;
42                 case 9:
43                     k9 = i;
44                     break;
45                 case 10:
46                     k10 = i;
47                     break;
48                 }
49             }
50         if(s==0)
51         {
52             printf("%d,Its factors are ",a);
53             if(n>1) printf("%d,%d",k1,k2);  //n>1表示a至少2个因子
54             if(n>2) printf(",%d",k3);       //n>2表示a至少3个因子,故应再输出一个因子
55             if(n>3) printf(",%d",k4);      //n>3表示a至少4个因子,故应再输出一个因子
56             if(n>4) printf(",%d",k5);
57             if(n>5) printf(",%d",k6);
58             if(n>6) printf(",%d",k7);
59             if(n>7) printf(",%d",k8);
60             if(n>8) printf(",%d",k9);
61             if(n>9) printf(",%d",k10);
62             printf("\n");
63         }
64         }
65         return 0;
66 }
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int main()
 4 {
 5     int a,s,i;
 6     for(a=2;a<1000;a++)   //a是2-1000之间的整数,检查它是否为完数
 7     {
 8         s=0;              //s用于存放因字数之和,初始值为0
 9         for(i=1;i<a;i++)   //检查i是否为a的因子
10         {
11             if(a%i==0)      //如果i是a的因子
12                 s = s+i;    //s因字数相加
13         }
14         if(s==a)            //如果因字数之和等于该数
15         {
16             printf("%d,its factors are ",a);
17             for(i=1;i<a;i++)//依次输出因子数之和
18             if(a%i==0)
19             printf("%d",i);
20             printf("\n");
21         }
22     }
23         return 0;
24 }

原文地址:https://www.cnblogs.com/spore/p/10334160.html

时间: 2024-09-29 10:36:26

18.求1000以内的完数的相关文章

【C语言】输出1000以内所有完数

1 #include<stdio.h> 2 int main() 3 { 4 int i,j,k; 5 for(i=1;i<1000;i++) 6 { 7 int sum=0; 8 for(j=1;j<i;j++) 9 { 10 if(i%j==0){ 11 sum+=j; 12 } 13 } 14 if(sum==i){ 15 printf("%d its factors are ",i ); 16 for(k=1;k<i;k++) 17 { 18 if

26.一个正整数如果恰好等于它的因子之和,这个数称为“完数”,如6=1+2+3,求1000以内所有的完数.

?#include<iostream> using namespace std; int main() { for(int i=1;i<=1000;i++) { int sum=0; for(int j=1;j<i;j++) { if(i%j==0) { sum+=j; } } if(sum==i) { cout<<i<<" "<<endl; } } return 0; } 26.一个正整数如果恰好等于它的因子之和,这个数称为

一道面试题:用多线程求1000以内的素数有多少个?并给出消耗时间

我曾经去一个公司面试,遇到这么一个题目:求1000以内的素数有多少个?用多线程实现,并给出消耗时间.我想了半天,没有想出多线程的解决方案.今天因为机缘到了,我浅谈下我的解法. 这道题,显然得考虑两个问题: 1.多线程的问题 2.算法性能问题 有人觉得1000以内还考虑什么算法性能?这肯定很快.但是话说回来,这个都有必要用多线程吗?如果我们求10000000以内的素数有多少个?是不是必须考虑以上两个问题了?多线程和算法优化的目的都是为了提高程序执行的效率.我们首先来考虑算法问题,什么是素数?素数:

Java版求1000以内的完全数

/* * 若一个自然数,它所有的真因子(即除了自身以外的约数)的和恰好等于它本身,这种数叫做完全数,简称完数. * 例如:6=1+2+3. * 题目:求1000以内的完全数. */ public class PerfectNumber { // 数字上限 static Integer limit = 1000; public static void main(String[] args) { System.out.println(limit + "以内的完全数有:"); fun(lim

C++实现 找出10000以内的完数

C++实现 找出10000以内的完数 #include <stdio.h> int main(){ int n; // 用户输入的整数 int i; // 循环标志 printf("输入一个整数:"); scanf("%d",&n); printf("%d=",n); // n>=2才执行下面的循环 for(i=2; i<=n; i++){ while(n!=i){ if(n%i==0){ printf("

&#8203;求1000以内是3或者是5的倍数的值的和

求1000以内是3或者是5的倍数的值的和?总结如下: 1.笨方法 a=0    for n in range(1,1000):    if n%3==0 or n%5==0:        a=a+n    print  a 2.群里某人发了个更简单的,一行解决,如下: sum(n for n in range(1,1000) if n%3==0 or n%5==0)

算法基础-求1000以内的质数

1 //筛选1000以内的所有质数 2 //说明:除了自身以外,无法被其它整数整除的数称之为质数. 3 // 4 #include <stdio.h> 5 #include <stdlib.h> 6 #define N 1000 7 8 int main(void) { 9 int i, j; 10 int prime[N + 1]; 11 //初始化数组都等于1 12 for( i = 2; i <= N; i++){ 13 prime[i]=1; 14 } 15 //嵌套

python求1000以内的素数

import timedef isPrime(n): for i in range(2,int(n**0.5)+1): if n % i==0: return False else: return True strPrimes=""t=time.clock()for j in range(2,1000): if isPrime(j): strPrimes=strPrimes+str(j)+"," print(strPrimes)print("Time us

Python3练习题求1000以内所有3和5的倍数的总和

sum = 0 for i in range(1,1000):     if i%3 == 0 or i%5 == 0:         sum += i print(sum) 原文地址:https://www.cnblogs.com/jackzz/p/9125562.html