c语言求2到1000内的所有完数【在线求各位赐教】
完数即为该数所有【真因子】(注意,是真因子之和)如6=1+2+3.我写的程序,麻烦看看那里错了#include<stdio.h>voidmain(){inta,b,c,s...
完数即为该数所有【真因子】(注意,是真因子之和)如6=1+2+3.
我写的程序,麻烦看看那里错了
#include <stdio.h>
void main ()
{
int a,b,c,s;
for(a = 2;a< =1000;a++)
for(b = 1;b< a;b++)
for(c=1;c<b;c++)
if((a % b == 0) &&(b%c!=0))
s=0;
s= s+b;
if(s == a)
printf("%d\n",a)
}
应该是for循环那里错了 展开
我写的程序,麻烦看看那里错了
#include <stdio.h>
void main ()
{
int a,b,c,s;
for(a = 2;a< =1000;a++)
for(b = 1;b< a;b++)
for(c=1;c<b;c++)
if((a % b == 0) &&(b%c!=0))
s=0;
s= s+b;
if(s == a)
printf("%d\n",a)
}
应该是for循环那里错了 展开
展开全部
#include<stdio.h>
int main()
{ int a,i,i1,sum=0;
scanf("%d",&a);//输入一个计算的范围数据
for(i=1;i<=a;i++)//范围数据累加循环
{
for(i1=1;i1<i;i1++)//完全数不包含本身所以i1<i
{
if(i%i1==0)//mod余为0
{
sum=sum+i1;//累加结果
}
}
if(sum==i)//判断是否是完全数
{
printf("%d 是完全数,分别由",sum);//输出
for(i1=1;i1<sum;i1++)
{
if(sum%i1==0)
printf(" %d",i1);
}
printf(" 这些数组成\n");
}
sum=0;
}
return 0 ;
}
//=============以下是根据你的源码改动一了下,对比一下就知道哪错了============
/*
#include <stdio.h>
void main ()
{
int a,b,s=0;
for(a=2;a<=1000;a++)
{
for(b=1;b<a;b++)
{
if(a%b==0)
s=s+b;
}
if(s==a)
printf("%d\n",s);
s=0;//这里s必须置0,否则再次循环,s初始值就是上次的值。
}
return 0;
}
*/
展开全部
#include <stdio.h>
main()
{
int i; int is(int n); /*is()函数的作用是判断n是否为完数*/
for(i=2; i<=1000; i++)
if(is(i)) /*返回真值为完数,输出它*/
printf("%d ",i);
}
int is(int n)
{
int i,sum;
sum=0;
for(i=1;i<=n/2;i++) /*这里n/2的意思是一个数的最大因子不超过它的一半大,没有必要做无谓的运算*/
if(!(n%i)) /*如果n%i等于0(就是说i为n的因子),对其求和*/
sum=sum+i;
if(sum==n)return 1; /*如果其所以因子之和等于其本身,返回真值*/
else return 0;
}
code::blocks已成功编译运行
main()
{
int i; int is(int n); /*is()函数的作用是判断n是否为完数*/
for(i=2; i<=1000; i++)
if(is(i)) /*返回真值为完数,输出它*/
printf("%d ",i);
}
int is(int n)
{
int i,sum;
sum=0;
for(i=1;i<=n/2;i++) /*这里n/2的意思是一个数的最大因子不超过它的一半大,没有必要做无谓的运算*/
if(!(n%i)) /*如果n%i等于0(就是说i为n的因子),对其求和*/
sum=sum+i;
if(sum==n)return 1; /*如果其所以因子之和等于其本身,返回真值*/
else return 0;
}
code::blocks已成功编译运行
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
main()
{
int i,j,sum;
for(i=2;i<1000;i++)
{
sum=0;
for(j=1;j<=i/2;j++)
{
if(i%j==0)
sum=sum+j;
}
if(sum==i)
printf("%4d",i);
}
}
{
int i,j,sum;
for(i=2;i<1000;i++)
{
sum=0;
for(j=1;j<=i/2;j++)
{
if(i%j==0)
sum=sum+j;
}
if(sum==i)
printf("%4d",i);
}
}
更多追问追答
追问
请不要复制~~网上的程序我看过了,都是求因子的,不是真因子。。。
追答
呵呵,我还真不知道什么是完数,所以去查,正好看它有代码,以为你有用。。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
#define M 1000
void main () {
int i,j,sum;
for(i = 2;i < M;i++) {
sum = 0;
for(j = 1;j < i;j++)
if(i % j == 0)
sum += j;
if(sum == i) printf("%d ",sum);
}
printf("\n");
}
#define M 1000
void main () {
int i,j,sum;
for(i = 2;i < M;i++) {
sum = 0;
for(j = 1;j < i;j++)
if(i % j == 0)
sum += j;
if(sum == i) printf("%d ",sum);
}
printf("\n");
}
追问
这个不对
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
以上都不对!!!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询