用C语言实现求出范围内的亲和数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用C语言实现求出范围内的亲和数相关的知识,希望对你有一定的参考价值。

请考虑一个自然数的各约数之和与该数本身的比率,即 R(n)。如果两个不相同的自然数的比率相等,那么这样的数称为一对“亲和数”(friendly numbers)。
如 200到600中的亲和数有
240,600

//c语法
#include
#include
int
main(int
argc,char
*argv[])

long
num1,num2,min,max;
srand(time(null));
printf("请指定范围:");
scanf("%ld
%ld",&min,&max);
while(1)

num1=rand()%(max+1)+min;
num2=rand()%(max+1)+min;
if(0==num1%2
&&
1==num2%2)

break;


printf("%ld*%ld=%ld",num1,num2,num1*num2);
system("pause");
return
0;

//c#语法
using
system;
namespace
t

class
program

public
static
void
main(string[]
args)

int
num1,num2,min,max;
random
r=new
random(datetime.now.millisecond);
console.writeline("请指定范围,每行一个:");
try

min=convert.toint32(console.readline());
max=convert.toint32(console.readline());
while(true)

num1=r.next(min,max+1);
num2=r.next(min,max+1);
if(0==num1%2
&&
1==num2%2)

break;


console.writeline("0*1=2",num1,num2,num1*num2);

catch(exception
)


console.write("按任意键退出。");
console.readkey(true);


参考技术A 亲和数,如220和284,220所有约数(不包括220)的和正好等于284,而284所有约数(不包括284)的和又正好是220.这就是亲和数 参考技术B #include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<string>
using namespace std;
long long a,b,sum=1,sam=0,sem=1;
int main()

cin>>a>>b;
for(int i=a;i<=b;i++)

for(int j=2;j<=sqrt(i*1.0);j++)

if(i%j==0)
sum+=i/j+j;

if(sum>i)

sum++;
//if(i==220||i==1184)
// cout<<sum<<endl;
for(int j=2;j<=sqrt(sum*1.0);j++)

if(sum%j==0)
sem+=sum/j+j;

sem++;
//if(i==220||i==1184)
// cout<<sem<<endl;
if(sem==i)
sam++;

sem=0;
sum=0;

cout<<sam<<endl;
return 0;
参考技术C 亲和数的定义都没搞清楚。建议先去晚上查查

C语言实现简化版桶排序

问题:编写一个程序,让计算机随机读入指定数量的指定范围内的数然后将这些数从大到小输出。

举例:现在共有 5 8 5 3 1 五个数,编写一个程序,使这五个数从大到小排序

解决:这里只需要借助一个一维数组就可以搞定。

首先申请一个大小为9的数组 int num[9],将 num[0]~num[9] 全部初始化为0,表示这些数还没有输入。例如 num[2]=0 就是说目前还没有出现 2 这个数,同理 num[5]=0 就是说还没有出现 5 这个数。

下面开始输入数据,第一个数是 5 ,那么对应的 num[5] 就要在原来的基础上自增 1,表示 5 这个数出现了一次;以此类推,输入剩下的四个数,也就是对应的 num[n] 在原来基础上自增 1.

数据输入完毕后,会发现数组的值发生了改变

因为 5 出现了两次,所以对应的 num[5] 的值就变为 2 ,同理 num[8],num[3],num[1] 的值也发生了相应改变。

输入完毕后,输出这些数,就实现了数据从大到小输出的问题。

#include <stdio.h>
int main(){
int num[9],i,t,j;

for(i=0;i<9;i++){
num[i] = 0;
}
for(i=0;i<5;i++){
scanf("%d",&t);
num[t]++;
}
for(i=9;i>=1;i--){
for(j=1;j<=num[i];j++){
printf("%4d",i);
}
}

getchar();
return 0;
}

以上的排序方法就是简单的桶排序,实现原理就是创建对应数量的桶,每个桶的编号就是下标,每出现一个数,就在对应编号的桶中放一个小旗,最后只需要数每个桶中有几个旗就ok了。

简化版桶排序并不是真正的排序算法,因为它的致命问题就是浪费空间。为此,需要学习冒泡排序,节省空间。


以上是关于用C语言实现求出范围内的亲和数的主要内容,如果未能解决你的问题,请参考以下文章

ZZNUOJ_用C语言编写程序实现1144:多种进制(附完整源码)

c语言问题啊

c语言问题啊啊

用c语言写出在10000内的所有水仙花数

C语言中如何实现大数计算

C语言实现简化版桶排序