blob: 3be999224b5cfb7df03e16cc11d1b260e7c2bf46 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <tice.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <fileioc.h>
void prime_factors(unsigned int n);
int primes[512];
unsigned int total_primes = 0;
/* Main Function */
void main(void) {
/* Declare some variables */
real_t *real_in;
list_t *list_out;
unsigned i;
int in;
/* Clear the homescreen */
os_ClrHome();
/* Get the answer variable */
if (ti_RclVar(TI_REAL_TYPE, ti_Ans, &real_in)) return;
if ((in = os_RealToInt24(real_in)) < 1) return;
/* Get the prime factors of the input */
prime_factors((unsigned)in);
/* Create a list to store the primes */
if (!total_primes) return;
list_out = ti_MallocList(total_primes); // Same as ti_AllocList(total_primes, malloc)
/* Write out the list of primes */
for (i=0; i<total_primes; i++) {
list_out->items[i] = os_Int24ToReal(primes[i]);
}
/* Set the new answer */
ti_SetVar(TI_REAL_LIST_TYPE, ti_Ans, list_out);
}
/* Store to an array all the prime numbers */
void prime_factors(unsigned int n) {
unsigned int div, end;
while (!(n % 2)) {
primes[total_primes++] = 2;
n /= 2;
}
if (n == 1) return;
div = 3;
end = sqrt(n);
while (div <= end) {
if (!(n % div)) {
do {
primes[total_primes++] = div;
n /= div;
} while (!(n % div));
if (n == 1) return;
end = sqrt(n);
}
div += 2;
}
primes[total_primes++] = n;
}
|