⑴ c语言编程,输入1000以内的完全数
#include<stdio.h>
intmain()
{
intn,i,sum;
for(n=2;n<=1000;n++)
{
sum=0;
for(i=1;i<n;i++)
{
if(n%i==0)
sum=sum+i;
}
if(sum==n)
{
printf("%ditsfactorsare",n);
for(i=1;i<n;i++)
{
if(n%i==0)
printf("%5d",i);
}
printf(" ");
}
}
return0;
}
这样就可以了
之前在没有累加完所有因数的时候 就进行了判断
这样就导致部分因数累加等于原值时同样会打印
比如 24 1 2 3 4 6 8 12
其中 24 = 1 + 2 + 3 + 4 + 6 + 8
⑵ c语言编程 计算1000以内的完全数,每8个数字一行。
#include <stdio.h>
int main()
{
int x,k,f=0,n;
for(x=2;x<=1000;x++)
{
n=0;//注意每次循环n都要为0
for(k=1;k<x;k++)//注意k要从1开始
if(x%k==0)
n=n+k;
if(n==x)
{
printf("%d ",x);
f++;
if(f%8==0)
printf("\n");
}
}
}
//其实1到1000内只有6 28 496这三个
⑶ 用C语言求1000以内的完数
完数,即完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。其所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于本身。
根据该定义 可以得出判断完数的函数如下:
#include <stdio.h>
int is_perfect_number(int n)
{
int i,s=0;
for(i = 1; i <=n/2; i ++)
if(n%i == 0) s+= i;//统计所有真因子的和。
if(s == n) return 1;//如果与原值相等,则该数为完数。
return 0;//不是完数。
}
根据该函数,只需要对需要打印的范围内1 ~1000做遍历,并逐一调用该函数判断,如果返回1则打印即可。
完整代码如下:
#include <stdio.h>
int is_perfect_number(int n)
{
int i,s=0;
for(i = 1; i <=n/2; i ++)
if(n%i == 0) s+= i;//统计所有真因子的和。
if(s == n) return 1;//如果与原值相等,则该数为完数。
return 0;//不是完数。
}
int main()
{
int n;
for(n = 1; n < 1000; n++)
if(is_perfect_number(n)) printf("%d,",n);
}
⑷ C语言求 1000以内的完全数
重置sum的位置错了,放到内循环的开头:
#include<stdio.h>
intwanquanshu()
{
intn,i,k,sum;
while(scanf("%d",&n)!=EOF)
{
for(i=1;i<=n;i++)
{
sum=0;//放在这里
for(k=1;k<i;k++)
{
if(i%k==0)
{
sum=sum+k;
}
}
if(sum==i)
{
printf("%d ",i);
}
}
}
return0;
}
voidmain()
{
wanquanshu();
}
⑸ 求c语言程序 求1000以内的素数
可以编写一个素数考察函数,在主函数中调用该函数对1000以内的整数穷举考察求解,也可以在主函数中直接对1000以内的整数穷举考察求解。这里提供一个用筛选法求解的代码,思路是声明一个大于等于1000个元素的char型(int型当然也可以,这里只是为了减少空间开销)数组并全部初始化为1,对下标不是素数的元素清0,最后依次输出不为0元素的下标便是题解。为提高操作效率,用2~33间(33^2>1000了,所以考察已充分了)的素数去除大于这个素数而小于等于1000的不为0的数,能整除的便将这个下标的元素清0。当用小于33的最大素数考察完毕后,依次输出数组中不为0的元素下标即可。代码如下:
#include"stdio.h"
intmain(intargc,char*argv[]){
inti,j;
charm[1001];//声明char型数组作为筛选对象
for(m[0]=m[1]=0,i=2;i<=1000;m[i++]=1);//m[0]和m[1]赋0,其余赋1备选
i=2;//考察次数2~33,用期间的素数去除大于i且小于等于1000间不为0的数
while((j=i)<33){
while(!m[++j]);//取j为大于i的第一个不为0的数为起始考察对象
while(j<=1000){
if(j%i==0)//这个数若能被小于它的素数整除则以它为下标的元素清0
m[j]=0;
while(!m[++j]);//下一个不为0的数为考察对象
}
while(!m[++i]);//2~33间的下一个素数
}
for(j=i=0;i<=1000;i++)//以下是输出
if(m[i])//不为0的数组元素的下标便是素数
printf(++j%20?"%4d":"%4d ",i);//每行输出20个
if(j%20)
printf(" ");
return0;
}
运行结果如下:
⑹ 用C语言编程找出1000以内的所有完数。(涉及知识点:for语句和if语句)。
一个数,所有的真因子(即除了自身以外的约数)的和,恰好等于本身,称为完数。
所以,要确认是否为完数,只要把所有真因子相加判断即可。
于是,这个题目的编程思路为:
1 遍历1~1000;
2 对每个数,判断是否为完数,如是,则输出;
3 程序结束。
代码如下:
#include<stdio.h>
intmain()
{
intn,i,s;
for(n=1;n<=1000;n++)
{
s=0;
for(i=1;i<=n/2;i++)
if(n%i==0)s+=i;//是真因子,累加。
if(s==n)//是完数。
printf("%d,",n);//输出。
}
return0;
}