质因数分解的小程序
c:
#include<stdio.h>
int isfactor (int n,int x)
{
if (n % x == 0) return x;
else if (x * x > n) return n;
else return isfactor (n , x % 2 == 0 ? x + 1 : x + 2);
}
void factor (int n)
{
if (n <= 1) ;
else
{
int a = isfactor (n , 2);
if (a == n) printf("%d" , a);
else printf ("%d*" , a);
factor (n / a);
}
}
void scan()
{
int n;
scanf ("%d" , &n);
printf("%d=",n);
factor (n);
printf("\n");
}
int main()
{
int n;
scanf("%d" , &n);
for (int i = 0 ; i < n ; i ++)
{
scan();
}
return 0;
}
Haskell:
factor n = if n <= 1 then [] else
let f = isfactor n 2 in f : factor (n `div` f)
where isfactor n x
| rem n x == 0 = x
| x ^ 2 > n = n
| otherwise =isfactor n (if odd x then x+2 else x+1)