mooc C语言练习题 函数 分解质因数 完数

1.分解质因数:短除法,从2开始,仅当每个因子除完以后再除下一个。比如2除完,除3,等再除4的时候必然无用,因为2是4的质因数,能整除4的一定能整除2

题目内容:

每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数。比如,6可以被分解为2x3,而24可以被分解为2x2x2x3。


现在,你的程序要读入一个[2,100000]范围内的整数,然后输出它的质因数分解式;当读到的就是素数时,输出它本身。


提示:可以用一个函数来判断某数是否是素数。


输入格式:

一个整数,范围在[2,100000]内。


输出格式:

形如:

n=axbxcxd

n=n

所有的符号之间都没有空格,x是小写字母x。abcd这样的数字一定是从小到大排列的。


输入样例:

18


输出样例:

18=2x3x3


#include <iostream>
#include <stdio.h> 
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int isPrime(int num)             //判断是否是素数,返回标志isPrime,isPrime=1是,0不是
{
	int isPrime=1;
	for(int i=2;i<num;i++)  
        {  
            if(num%i==0)   
            {  
                isPrime=0;  
                break;  
            }     
        }  
    return isPrime;
}

int main(int argc, char** argv) {
	int num;
	scanf("%d",&num);
	if(isPrime(num)) printf("n=%d",num);         //是素数直接输出
	else{
		printf("n=");
		for(int i=2;num!=1;i++)
		{       //从2开始除,取商做下一轮,商1代表结束
			if(num%i==0) {
				num/=i;
				num!=1?printf("%dx",i):printf("%d",i);      //最后一个质因数后面打印不跟x
				i--;                                        //保证把一个质因数除完
			}		
		}
	}
	return 0;
}

2.完数

题目内容:

一个正整数的因子是所有可以整除它的正整数。而一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。例如6=1+2+3(6的因子是1,2,3)。


现在,你要写一个程序,读入两个正整数n和m(1<=n<m<1000),输出[n,m]范围内所有的完数。


提示:可以写一个函数来判断某个数是否是完数。

输入格式:

两个正整数,以空格分隔。


输出格式:

其间所有的完数,以空格分隔,最后一个数字后面没有空格。如果没有,则输出一行文字:

NIL

(输出NIL三个大写字母加回车)。


输入样例:

1 10


输出样例:

6

#include <iostream>
#include  <stdio.h> 
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int isPrime(int num)
{
	if(num==1)   return 0;       //1不是素数但,1不是完数此处为了方便return 0
	for(int i=2;i<num;i++)
	{
		if(num%i==0) return 0;
	}
	return 1;
}

int isPerfect(int num)
{
	int i,j=0,sum=0;
	int factr[30]={0};           //静态数组的大小需要多次尝试后确定,否则会有segment fault 

	if(isPrime(num)) return 0;
	
	for(i=1;i<num;i++)
	   if(num%i==0) 
	   {
		factr[j]=i;
		j++;
	   }
	
	for(--j;j>=0;j--)
	  sum+=factr[j];
	
	if(sum==num) return 1;
	else return 0;
}
void printPerfect(int n,int m)
{	
	for(int i=n;i<=m;i++)
	{
		if(isPerfect(i)) printf("%d\n",i);
	}
}

int main(int argc, char** argv) {
	int n,m;
	scanf("%d %d",&n,&m);
	printPerfect(n,m);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/scarletteshu/article/details/79517872