I made this simple function, but it crashes at p=29. It makes a stopped working error window.
Please Help Me
#include <iostream>
using namespace std;
char *primality(unsigned long,unsigned long i=0);
int main()
{
    for(int i=0;i<1000;i++)
        cout<<i<<": "<<primality(i)<<endl;
};
char *primality(unsigned long p,unsigned long i)
{
    if(i==0)
    {
        if(p<=1)
            return "NEITHER PRIME NOR COMPOSITE";
        else if(p==2||p==3)
            return "\tPRIME";
        else if(p%2==0||p%3==0)
            return "\tCOMPOSITE";
    }
    i=5;
    if(i*i<=p)
        if(p%i==0||p%(i+2)==0)
            return "\tCOMPOSITE";
        else
            return primality(p,i+6);
    else
        return "\tPRIME";
}
The output after 29 is stopped and causes a crash
Output:
0: NEITHER PRIME NOR COMPOSITE
1: NEITHER PRIME NOR COMPOSITE
2:      PRIME
3:      PRIME
4:      COMPOSITE
5:      PRIME
6:      COMPOSITE
7:      PRIME
8:      COMPOSITE
9:      COMPOSITE
10:     COMPOSITE
11:     PRIME
12:     COMPOSITE
13:     PRIME
14:     COMPOSITE
15:     COMPOSITE
16:     COMPOSITE
17:     PRIME
18:     COMPOSITE
19:     PRIME
20:     COMPOSITE
21:     COMPOSITE
22:     COMPOSITE
23:     PRIME
24:     COMPOSITE
25:     COMPOSITE
26:     COMPOSITE
27:     COMPOSITE
28:     COMPOSITE
29:
--------------------------------
Process exited after 2.855 seconds with return value 3221225725
Press any key to continue . . .
Also, note that I got a return value. Please tell the meaning of this error message
I'm also instructed to use char arrays instead of strings.
 
     
    