大概看了一下,你判断是否为因子的地方有问题,应该用取余运算符号:%
创新互联公司为您提适合企业的网站设计 让您的网站在搜索引擎具有高度排名,让您的网站具备超强的网络竞争力!结合企业自身,进行网站设计及把握,最后结合企业文化和具体宗旨等,才能创作出一份性化解决方案。从网站策划到成都网站建设、成都做网站, 我们的网页设计师为您提供的解决方案。
用除号是不行的,呵呵。
另外,你把求一个数的因子和,写成一个函数,这样的话,程序看起来更明了,你也不容易混乱。
求因子和的函数如下:
int sumf(int num)
{
int i,sum = 0;
for(i = 1;i = num; i ++)
{
if(num % i == 0)
{
sum += i;
}
}
return sum;
}
不过你所说的因子是否包含了1和数本身?如果包含的话,我运行了一下,2到1000好像没发现有满足条件的。
如果不包含1和本身,倒是有几个,全程序是这样:
#include stdio.h
#include stdlib.h
int main(void)
{ int i;
for(i = 2; i 1000; i++)
{
//printf("%d--%d--%d\n",i,sumf(i),sumf(sumf(i)));
if(i == sumf(sumf(i)))
{
printf("%d %d\n",i,sumf(i));
}
}
system("pause");
return 0;
}
int sumf(int num)
{
int i,sum = 0;
for(i = 2;i num; i ++)
{
if(num % i == 0)
{
sum += i;
}
}
return sum;
}
亲密数对:两正整数a、b,若a的所有包含1但不包含自身的因子和等于b,b的所有包含1但不包含自身的因子和又等于a,则称a、b为一对亲密数或一亲密数对。
具体代码如下:
#include
int
fun(int
n)
{
int
i,sum;
sum=1;
for(i=2;i=n/2;i++)
if
(n%i==0)
sum+=i;
return
sum;
}void
main()
{
int
a,b,c;
for
(a=2;a=1000;a++)
{
b=fun(a);
c=fun(b);
if
(c==a)
printf("%5d%5d\n",a,b);
}
}
#include
stdio.h
#include
conio.h
int
facsum(int
n)
{
int
sum=0;
for
(int
i=1;in;i++)
{
if(n%i==0)
sum+=i;
}
return
sum;
}
main()
{
for
(int
i=1;i=500;i++)
{
int
M1=facsum(i);
if
(facsum(M1)==ii=M1)
{
printf("%d和%d互为亲密数\n",i,M1);
}
}
}
可以吗?输出要有文字说明,你可以自己改printf("%d和%d互为亲密数\n",i,M1);这句话就行了。
#includestdio.h
#define N 3000Yzh();
void main()
{
/*int a; scanf("%d",a); printf("%d",Yzh(a));*/
int a,b,i,j;
for(i=2;iN;i++)
{
a = Yzh(i);
for(j=2;jN;j++)
{
b = Yzh(j);
if(a==j b==i ij) //因为要小的数在前面所以应该是小于
printf("(%d,%d)",i,j);
}
}
}
int Yzh(int x)
{
int n,sum=0;
for(n=1;n=x/2;n++)
{
if(x%n==0)
sum+=n;
}
return sum;//因为你在主函数中会用到因子的和这个值,所以你必须要把调用函数的值返回给主函数
}
这是我修改的你的代码,输出符合你的要求,不过3000以内的亲密数好像只有3对
#includestdio.h
int main()
{
int a,b,n;
int facsum(int n,int *a,int *b);
printf("There are following friendly--numbers pair smaller than 500:\n");
for(a=1;a500;a++) /*穷举500以内的全部整数*/
{
n=facsum(n,a,b);
if(n==aa=b)
printf("%4dand%d\n",a,b); /*若n=a,则a和b是一对亲密数,输出*/
}
}
int facsum(int n,int *a,int *b)
{
int i;
for(*b=0,i=1;i=*a/2;i++) /*计算数a的各因子,各因子之和存放于b*/
if(!(*a%i))
*b+=i; /*计算b的各因子,各因子之和存于n*/
for(n=0,i=1;i=*b/2;i++)
if(!(*b%i))
n+=i;
return n;
}
呵呵,楼主,你还是多看看函数的用法吧,先理清逻辑。
#include stdio.h
#define N 500
int result[N];
/* calculate one number */
int facsum(int n)
{
int sum = 0, i;
for (i = 1; i = n; i++) {if (n % i == 0) sum += i;}
return sum;
}
int swap (int begin, int end)
{
int temp;
temp = begin; begin = end; end = temp;
return 0;
}
int main()
{
int i, j ;
for (i = 0; i N; i++){
result[i] = facsum(i+1);
}
for (i = 1; i N; i++){
for (j = N; j i; j--){
if (result[j-1] result[j]) swap(j-1, j);
}
}
for (i = 0; i N; i++)
printf("%d\n", result[i]);
/* 上面是有序的因子之和 , 下面开始判断是不是亲密对数 */
for (i = 1; i = 20; i++){
if (facsum(facsum(i)) == i)
printf("%d and %d is inimite num!\n", i, facsum(i));
}
return 0;
}