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;
}