把一个整数分解为素数相乘 个人感觉效率还可以。 复杂度,取决于这个整数的组成。 一般情况下就是素数个数+判断最大素数因子为素数 的复杂度吧! #include <stdio.h> #include <math.h> #define MAX 128 #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; }