输出某个数的质因数分解式/输出[n,m]内所有完数

1.每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数。比如,6 可以被分解为2x3,而24 可以被分解为2x2x2x3。现在,你的程序要读入一个[2,100000]范围内的整数,然后输出它的质因数分解式;当
读到的就是素数时,输出它本身。

所有的符号之间都没有空格,x 是小写字母x。

#include <stdio.h>
int prime(int a);    //判断a是否为素数 
int main()
{
	int num,c,ins,mask;
	scanf("%d",&num);
	c=prime(num);
	if (c==1){
		printf("%d=%d\n",num,num);
	}else{
		printf("%d=",num);
		do{
			ins=1;
			do{
				ins++;
				mask=0;
				if (prime(ins)==1){     //如果ins是素数,则计算mask 
				mask=num%ins;	
				}
			}while(mask!=0||prime(ins)==0);	 //当num不能整除ins或者ins不是素数时,执行内部循环,即ins++ 
			num=num/ins;
			printf("%dx",ins);
		}while(prime(num)==0);  //当计算得到的num不是素数时,执行外部循环,即ins初始化 
		printf("%d\n",num);
	}
	return 0;
}

int prime(int a)     //判断a是否为素数 
{ 
	int i;
	int isprime=1;
	for (i=2;i<a;i++){
		if (a%i==0){
			isprime=0;
		}
	}
	return isprime;
}

2.一个正整数的因子是所有可以整除它的正整数。而一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。例如6=1+2+3(6 的因子是1,2,3)。现在,你要写一个程序,读入两个正整数n 和m(1<=n<m<1000),输出[n,m]范围内所有的完数。

#include <stdio.h>
int perfect(int a);      //判断完全数 
int main()
{
	int count,n,m,i;
	count=0;
	scanf("%d %d",&n,&m);
	for(i=n;i>=n&&i<=m;i++){
		if (perfect(i)==1){
			count++;              //计算设定范围内完全数的个数 
		}
	}
	for(i=n;i>=n&&i<=m;i++){
		if (perfect(i)==1){
			printf("%d",i);
			count--;
			if (count!=0){        //当个数减为0时,表示规定范围内最后一个完全数 
				printf(" ");
			}
		}
	}
	printf("\n");
	return 0;
}

int perfect(int a)         //判断完全数 
{
	int ins,mask;
	int sum=0;
	int isperfect=0;
	for(ins=1;ins<=a-1;ins++){
		mask=a%ins;
		if (mask==0){
			sum=sum+ins;
		}
	}
	if (sum==a){
		isperfect=1;
	}
	return isperfect;
}

猜你喜欢

转载自blog.csdn.net/qq_26565435/article/details/82144378
今日推荐