把一个整数分解为素数相乘
个人感觉效率还可以。
复杂度,取决于这个整数的组成。
一般情况下就是素数个数+判断最大素数因子为素数 的复杂度吧!
#define NUMBER 250
int isteps = 0;
//分解因式,打印出来
void breakNumber(int num)
{
int i;
int left;
left = num;
for(i = 2; i<=sqrt(left);i++)
{
isteps++;
//除掉所有i
while(0 == left%i)
{
printf("%d/n",i);
left /= i;
isteps++;
}
}
if (left!=1 || num == 1)//need not 1 any more
printf("%d/n",left);
printf("All:%d/n",isteps);
}
//分解因式、保存到数组,和上面那个差不多,就是改了输出方式
int resolveNumber(int num, int out[])
{
int i;
int left;
int totalNumber = 0;
left = num;
for(i = 2; i<=sqrt(left);i++)
{
while(0 == left%i)
{
//printf("%d/n",i);
out[totalNumber++] = i;
left /= i;
isteps++;
}
}
if (left!=1 || num == 1)//need not 1 any more
{
out[totalNumber++] = left;
}
return totalNumber;
}
int main()
{
int i =0;
int geneNumber = 0;
int genes[MAX] = {0};
//breakNumber(NUM);
geneNumber = resolveNumber(NUMBER,genes);
printf("geneNumbers:%d/n",geneNumber);
for (i = 0; i< geneNumber; i++)
{
printf("%d/n",genes[i]);
}
return 0;
}