0056 如果一个数等于它的因子之和,则称该数为“完全数”。例如,6的因子为1、2、3,而 6=1+2+3,因此6是“完全数”。同时完全数也满足 (2p-1)*2p-1这一公式,例如6的p=2...

问题描述:

  如果一个数等于它的因子之和,则称该数为“完全数”。例如,6的因子为1、2、3,而 6=1+2+3,因此6是“完全数”。同时完全数也满 (2p-1)*2p-1这一公式,例如6的p=2。

  请在第一行输出10000内的完全数,之后的行输出每个完全数对应的p,如:6  2

代码展示:

 1 #include<stdio.h>
 2 #include<math.h>
 3 int fun1(int n[100][2]);
 4 void fun2(int n[100][2], int len);
 5 int main(){
 6     int n[100][2];        //用于存储完全数及p
 7     int i;                //循环变量 
 8     int len;             //完全数的个数 
 9     len = fun1(n);        //求完全数 
10     fun2(n,len);        //求完全数的p值 
11     printf("完全数有:");
12     for(i=0; i<len; i++){
13         printf("%d ", n[i][0]);
14     } 
15     printf("\n每个完全数和对应的p值为:\n");
16     for(i=0; i<len; i++){
17         printf("%d %d\n",n[i][0],n[i][1]);
18     }
19     return 0;
20 } 
21 int fun1(int n[100][2]){
22     int i,j;
23     int len=0;
24     int sum;
25     for(i=3;i<10000;i++){        //寻找完全数 
26         sum = 0;
27         for(j=1; j<i; j++){
28             if((i%j)== 0){
29                 sum = sum + j;
30             }
31         }
32         if(sum == i){
33             n[len][0] = i;
34             len++;
35         }
36     } 
37     return len;
38 }
39 void fun2(int n[100][2], int len){        //求p值 
40     int i,j,temp;
41     for(i=0; i<len; i++){
42         for(j=1; j<n[i][0]; j++){
43             temp = (pow(2,j)-1)*(pow(2,j-1));
44             if(temp == n[i][0]){
45                 n[i][1] = j;
46                 break;
47             }
48         }
49     }
50 }

运行截图:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空梦♡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值