c语言 输出10000以内的亲密数。
*问题分析与算法设计
按照亲密数定义,要判断数a是否有亲密数,只要计算出a的全部因子的累加和为b,再计算b的全部因子的累加和为n,若n等于a则可判定a和b是亲密数。计算数a的各因子的算法:
用a依次对i(i=1~a/2)进行模运算,若模运算结果等于0,则i为a的一个因子;否则i就不是a的因子。
*程序说明与注释
#include
int main()
{
int a,i,b,n;
printf("There are following friendly--numbers pair smaller than 10000:\n");
for(a=1;a<10000;a++) /*穷举10000以内的全部整数*/
{
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;
if(n==a&&a
printf("%4d..%4d\n",a,b); /*若n=a,则a和b是一对亲密数,输出*/
}
}
*运行结果
There are following friendly--numbers pair smaller than 10000:
220.. 284
1184.. 1210
2620.. 2924
5020.. 5564
6232.. 6368
c语言10000以内完数的个数
完数,即完美数,一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。
1000以内所有完数
C语言代码:
#include
/**CopyRight@fantasy0707*/
#define N 1000 //完数求解范围
main()
{
int i,j,sum; //sum用来存放因子之和
for(i=1;i
{
sum=0; //给sum赋值,同时也是对上一次的值清空
for(j=1;j<=i/2;j++) //查找因子
{
if(i%j==0) // 如果是因子
{
sum+=j; //把当前的因子累加到sum中
}
}
if(sum==i) //判断是不是完数,即因子之和等于自身
{
printf("%-5d its factors are: ",i); //是完数,输出
for(j=1;j<=i/2;j++) //再次找出这个完数的因子
{
if(i%j==0) //输出各个因子
printf("%d,",j);
}
printf("\n");
}
}
}
c语言。将一个小于10000的数逆向输出
看代码:#include
int main()
{
printf("请输入一个数:");
int num;
scanf ("%d", &num);
while (num > 0)
{
printf ("%d", num % 10); // 取 num 的最后一位输出
num /= 10; // 去掉最后一位
}
printf ("\n");
return 0;
}
编译运行:
用c语言输出10000以内的同构数
#include
#include
int main()
{
int i,n,t;
for(n=1;n<1000;n++)
{
t=n*n;
if(n<=10)
{if(t%10==n)printf("%d * %d = %d\n",n,n,t);
else continue;
}
else if(n<=100)
{if(t%100==n) printf("%d * %d = %d\n",n,n,t);
else continue;
}
else
{if(t%1000==n) printf("%d * %d = %d\n",n,n,t);
else continue;
}
}
system("pause");
return 0;
}
我用的编译器是dev,应该能行,你看看吧!
c语言10000以内完数的个数
完数,即完美数,一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。
1000以内所有完数
C语言代码:
#include
/**CopyRight@fantasy0707*/
#define N 1000 //完数求解范围
main()
{
int i,j,sum; //sum用来存放因子之和
for(i=1;i
{
sum=0; //给sum赋值,同时也是对上一次的值清空
for(j=1;j<=i/2;j++) //查找因子
{
if(i%j==0) // 如果是因子
{
sum+=j; //把当前的因子累加到sum中
}
}
if(sum==i) //判断是不是完数,即因子之和等于自身
{
printf("%-5d its factors are: ",i); //是完数,输出
for(j=1;j<=i/2;j++) //再次找出这个完数的因子
{
if(i%j==0) //输出各个因子
printf("%d,",j);
}
printf("\n");
}
}
}
c语言 求出亲密数对
大概看了一下,你判断是否为因子的地方有问题,应该用取余运算符号:%
用除号是不行的,呵呵。
另外,你把求一个数的因子和,写成一个函数,这样的话,程序看起来更明了,你也不容易混乱。
求因子和的函数如下: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
#include
int main(void)
{ int i;
for(i = 2; 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
{
if(num % i == 0)
{
sum += i;
}
}
return sum;
}
如何用C语言编写2——1000之内的亲密数对?
亲密数对:两正整数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);
}
}
请用vb编写一个找出10000以内的亲密数对的小程序
需要两个函数,一个因子和计算,一个因子和输出。程序窗体放置一个文本框,设置其MultiLine为True。源程序如下:
Option Explicit
Dim I As Long, J As Long, X As Long
Private Sub Form_Load()
Me.Show
For I = 1 To 10000
DoEvents
X = Yzh(I)
If X <= 10000 And I < X Then
If Yzh(X) = I Then
Text1 = Text1 & "(" & I & "," & X & ")" & Chr(13) & Chr(10)
YzhOut (I)
YzhOut (X)
End If
End If
Next
Text1 = Text1 & "计算完成"
End Sub
Private Function Yzh(N As Long) As Long
Yzh = 0
For J = 1 To N / 2
If N Mod J = 0 Then Yzh = Yzh + J
Next
End Function
Private Function YzhOut(N As Long) As Long
Dim Yzh As Long
Text1 = Text1 & N & "=1"
Yzh = 1
For J = 2 To N / 2
If N Mod J = 0 Then
Text1 = Text1 & "+" & J
Yzh = Yzh + J
End If
Next
Text1 = Text1 & "=" & Yzh & Chr(13) & Chr(10)
End Function
程序计算结果,有5组亲密数对,程序输出是:
(220,284)
220=1+2+4+5+10+11+20+22+44+55+110=284
284=1+2+4+71+142=220
(1184,1210)
1184=1+2+4+8+16+32+37+74+148+296+592=1210
1210=1+2+5+10+11+22+55+110+121+242+605=1184
(2620,2924)
2620=1+2+4+5+10+20+131+262+524+655+1310=2924
2924=1+2+4+17+34+43+68+86+172+731+1462=2620
(5020,5564)
5020=1+2+4+5+10+20+251+502+1004+1255+2510=5564
5564=1+2+4+13+26+52+107+214+428+1391+2782=5020
(6232,6368)
6232=1+2+4+8+19+38+41+76+82+152+164+328+779+1558+3116=6368
6368=1+2+4+8+16+32+199+398+796+1592+3184=6232
计算完成