
C语言高手帮下忙 20
【程序功能】找出给定范围内的和亲数。对于两个正整数,如果其中一个整数是另一个整数的全部因子,反之亦然而,则称这两个数为“和亲数”。例如,220有真因子“1,2,4,5,1...
【程序功能】
找出给定范围内的和亲数。
对于两个正整数,如果其中一个整数是另一个整数的全部因子,反之亦然而,则称这两个数为“和亲数”。例如,220有真因子“1,2,4,5,10,11,20,22,44,55,110“,其和为284,而284有真因子 “1,2,4,71,142”,其和为220,因此220和284就是一对和亲数。
【编程要求】
1. 编写函数int heqinmath(int m,int n,int a[][2]),找出m~n(m<n)之间的所有和亲数对,并将其保存到a指向的数组中,函数返回a数组中和亲数对的个数。
2. 编写main函数,接收键盘输入的两个正整数m 和 n(m<n),调用heqinmath函数求出m~n之间的所有主亲数对,将结果输出到屏幕并保存到文件myf2.out中。最后将考生本人的准考证号安符串保存到文件myf2.out中。
【测试数据与运行结果】
测试数据: m=2, n=500
运行结果:(220,284)
(284,220) 展开
找出给定范围内的和亲数。
对于两个正整数,如果其中一个整数是另一个整数的全部因子,反之亦然而,则称这两个数为“和亲数”。例如,220有真因子“1,2,4,5,10,11,20,22,44,55,110“,其和为284,而284有真因子 “1,2,4,71,142”,其和为220,因此220和284就是一对和亲数。
【编程要求】
1. 编写函数int heqinmath(int m,int n,int a[][2]),找出m~n(m<n)之间的所有和亲数对,并将其保存到a指向的数组中,函数返回a数组中和亲数对的个数。
2. 编写main函数,接收键盘输入的两个正整数m 和 n(m<n),调用heqinmath函数求出m~n之间的所有主亲数对,将结果输出到屏幕并保存到文件myf2.out中。最后将考生本人的准考证号安符串保存到文件myf2.out中。
【测试数据与运行结果】
测试数据: m=2, n=500
运行结果:(220,284)
(284,220) 展开
1个回答
展开全部
#include <stdio.h>
#include <math.h>
/*保存文件*/
FILE *pf = NULL;
void writefile(int num1,int num2)
{
fprintf(pf,"(%d,%d)\n",num1,num2);
}
/*计算一个数的真因子的和的函数,返回计算的和值*/
int jszysh(int num)
{
int rtv = 0;
int i = 2;
int tmp = 0;
for ( i = 2; i <= (int)sqrt((double)num)+1; i++ )
{
if ( num % i == 0 )
{
tmp = num / i;
if ( tmp != i )
{
rtv += (i + tmp);
}
else
{
rtv += i;
}
}
}
rtv = rtv + 1;
return rtv;
}
//此函数不需要返回值,也不需要返回数组,直接写文件就好了.
void heqinmath(int m,int n)
{
int i,j;
for ( i = m ; i < n ; i++ )
{
for ( j = i+1 ; j <= n ; j++ )
{
if ( jszysh(i) == j && jszysh(j) == i )
{
writefile(i,j);
}
}
}
}
int main(void)
{
int m,n;
printf("输入区间m和n:\n");
printf(" m = ");
scanf("%d",&m);
printf(" n = ");
scanf("%d",&n);
pf = fopen("myf2.out","wt");
if ( NULL == pf )
{
perror("打开文件失败!");
return 0;
}
heqinmath(m,n);
fclose(pf);
return 0;
}
#include <math.h>
/*保存文件*/
FILE *pf = NULL;
void writefile(int num1,int num2)
{
fprintf(pf,"(%d,%d)\n",num1,num2);
}
/*计算一个数的真因子的和的函数,返回计算的和值*/
int jszysh(int num)
{
int rtv = 0;
int i = 2;
int tmp = 0;
for ( i = 2; i <= (int)sqrt((double)num)+1; i++ )
{
if ( num % i == 0 )
{
tmp = num / i;
if ( tmp != i )
{
rtv += (i + tmp);
}
else
{
rtv += i;
}
}
}
rtv = rtv + 1;
return rtv;
}
//此函数不需要返回值,也不需要返回数组,直接写文件就好了.
void heqinmath(int m,int n)
{
int i,j;
for ( i = m ; i < n ; i++ )
{
for ( j = i+1 ; j <= n ; j++ )
{
if ( jszysh(i) == j && jszysh(j) == i )
{
writefile(i,j);
}
}
}
}
int main(void)
{
int m,n;
printf("输入区间m和n:\n");
printf(" m = ");
scanf("%d",&m);
printf(" n = ");
scanf("%d",&n);
pf = fopen("myf2.out","wt");
if ( NULL == pf )
{
perror("打开文件失败!");
return 0;
}
heqinmath(m,n);
fclose(pf);
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询