当前位置: 代码迷 >> C语言 >> 求下面的算法!(不要笑我)
  详细解决方案

求下面的算法!(不要笑我)

热度:162   发布时间:2007-07-05 22:13:44.0
和求约数是一回事吧~~
#include<stdio.h>
void main()
{
int num,i,a;
printf("enter the number:(q to quit)\n");
while(scanf("%d",&num)==1)
{
for(i=2,a=0;i*i<=num;i++)
{
if(num%i==0)
{printf("%d %d\n",i,num/i);
a++;
}
}
if(a==0)
printf("no number\n");
printf("enter next number:(q to quit)");
}
}
请问这个可以吗?

----------------解决方案--------------------------------------------------------
你是要得要一个解还是所有解?
----------------解决方案--------------------------------------------------------
以下是引用troubles0407在2007-7-5 22:13:44的发言:
和求约数是一回事吧~~
#include<stdio.h>
void main()
{
int num,i,a;
printf("enter the number:(q to quit)\n");
while(scanf("%d",&num)==1)
{
for(i=2,a=0;i*i<=num;i++)
{
if(num%i==0)
{printf("%d %d\n",i,num/i);
a++;
}
}
if(a==0)
printf("no number\n");
printf("enter next number:(q to quit)");
}
}
请问这个可以吗?

你的算法比我的简单
----------------解决方案--------------------------------------------------------
其实也不必特意拿出素数来除,因为它给的数也就100以内.
求素数是只要算到根号就可以了.
----------------解决方案--------------------------------------------------------
同意上楼的观点
----------------解决方案--------------------------------------------------------
用素数的原因是为了提高效率,循环次数会减少很多,我修改下我的算法,应该比11楼的效率高,但是有个bug,就是用重复的数值的剩积的数时,结果会不全,不过题目屏蔽这个情况:


int main()
{
int sum[4]={2,3,5,7};
int a,b,i=0;
int ret[50],s=0;

printf("input a number:");
scanf("%d",&a);

b=a;
while((sum[i]<sqrt(a) && i<4))
{
if(a%sum[i]==0)
{
ret[s]=sum[i];

a=a/sum[i];
i=0;
s++;
}
else
i++;
}

for(i=0;i<s;i++)
{
printf("%d*%d\n",ret[i],b/ret[i]);
ret[i+1]=ret[i+1]*ret[i];
}
}

----------------解决方案--------------------------------------------------------
对啊,求素数是也不是用根号该数然后得到的吗?
----------------解决方案--------------------------------------------------------

以下是引用我是菜鸟哦在2007-7-6 11:52:18的发言:
对啊,求素数是也不是用根号该数然后得到的吗?

这句没明白什么意思
----------------解决方案--------------------------------------------------------

  相关解决方案