当前位置: 代码迷 >> C语言 >> [求助]菜鸟碰到难题了
  详细解决方案

[求助]菜鸟碰到难题了

热度:288   发布时间:2006-10-01 20:54:16.0
[求助]菜鸟碰到难题了
输入一个100以内的整数,求他的约数.用while循环做!如果输入数就为质数就显示该数,比如90=5*3*3*2.我的思路是把这个数除以该数-1就是n/(n-1),如果余数为0则取商,该数去除以商得出的数继续做n/(n-1)循环.直到n=2结束,再把所有的商打印出来,显示为90=5*3*3*2,如果余数不为0则循环.
目前只有这点思路也不知道对不对,因为刚刚学,这题目感觉太复杂了代码表达不出来,望高手写一下代码,让我了解熟悉一下!!谢谢了!!
搜索更多相关的解决方案: 难题  

----------------解决方案--------------------------------------------------------

搜索以前的帖子吧~~


----------------解决方案--------------------------------------------------------
这个和我出的那个1000以内数的质因子分解一样哦.
int i=2,flag=0;
while(i<=n)
{
if(n%i==0)//循环除去他的质因子.
{
if(flag==1)//输出格式
{
printf("*");
}
printf("%d",i);
n=n/i;
flag=1;
}
else
i++;
}
----------------解决方案--------------------------------------------------------
#include <stdio.h>
int Dec(int n,int i);
int Prime(int n);
int main(void){

int arr[10];

int i,j,n,m,flag,k=0;

for(i=0;i<10;i++)

arr[i]=1;

printf("输入数字:");

scanf("%d",&n);

m=n,i=2,j=1;

while((m!=1)&&(i!=10)){


flag=Dec(m,i);

if(flag!=0)

Dec(m,++i);

else{

m=m/i;

arr[j]*=i;

j++;
}
}
printf("%d=",n);

for(i=0;i<10;i++){

if(arr[i]!=1)

printf("%d*",arr[i]);

else

k++;
}

printf("\b");

if(k!=0)

printf("\b\b是个素数\n");

return 0;

}

int Dec(int n,int i){

if(n%i!=0)

return 1;

else

return 0;
}


----------------解决方案--------------------------------------------------------

/*找到了版主老大求质因数经典代码了,麻烦版主老大做个注释方便我们新手学习!谢谢!!*/
#include<stdio.h>
int main()
{
int n,i=2;
printf("请输入一个数子:");
scanf("%d",&n);
printf("%d=",n);
while(n!=1)
{
while(n%i==0)/*从2开始整除*/
{
if(n/i!=1)
printf("%d*",i);
else
printf("%d",i);
n=n/i;
}
i++;
}
printf("\n");
return(0);
}


----------------解决方案--------------------------------------------------------
要求一个数的质因子分解,首先要确定是他的约数,然后是质数.
这里在求约数时要循环除尽他的约数,有点想筛选法,你想,除过2(并且除尽2)了当然以后的偶数不会是此时n的约数了.
同理以后3 5 7 ..的质数都被除尽,而这些的指数的倍数都会跳过去了.
----------------解决方案--------------------------------------------------------
  相关解决方案