ok thank you for replying, i understand those. and this is the whole program...
Code:
// Problem A: Prime Ring
#include <stdio.h>
#include <iostream>
#include <cstdlib>
#include <math.h>
using namespace std;
bool NotInRing(int iPos, int iNum);
int GetNumber(int iPos, int iNumber);
bool IsPrime(int iNum);
bool FindNumber(int iPos);
int ring[16];
int m;
int main()
{
int i, j, k;
// insert the 1 value into first position which is ring[0]
ring[0] = 1;
while (scanf("%d", &m))
{
if (m == 0)
break;
// printf("Get %d\n", m);
if (FindNumber(1) == true)
{
for(j=0; j<m; j++)
{
printf("%d ", ring[j]);
}
printf("\n");
}
}// end while.
system("pause");
return 0;
}
bool NotInRing(int iPos, int iNum)
{
for(int i=0; i<iPos; i++)
{
if (iNum == ring[i])
{
return false;
}
}
return true;
}
int GetNumber(int iPos, int iNumber)
{
for(int i=iNumber+1; i<=m; i++)
{
if (NotInRing(iPos, i))
return i;
}
return 0;
}
bool IsPrime(int iNum)
{
for (int i=2; i<=sqrt((double)iNum); i++) //sqr/sqrt
{
if (iNum == ((int)iNum/i)*i) // (inum%i == 0)
return false;
}
return true;
}
bool FindNumber(int iPos)
{
int iNumberTwo, iTotal;
if(iPos < 1)
return false;
if (iPos == m)
{
iTotal = ring[iPos-1] + ring[0];
if (IsPrime(iTotal))
{
for(int j=0; j< m; j++)
{
printf("%d ", ring[j]);
}
printf("\n");
return true;
}
else
return false;
}
iNumberTwo = GetNumber(iPos, 0);
while(iNumberTwo != 0)
{
ring[iPos] = iNumberTwo;
iTotal = ring[iPos]+ring[iPos-1];
if (IsPrime(iTotal))
{
// printf("Now in %d, try %d, and %d is prime\n", iPos, ring[iPos], iTotal);
// for(int i=0; iĦq =iPos; i++)
// printf("%d ", ring[i]);
// printf("\n\n");
if (FindNumber(iPos+1) == true)
{
// iPos --;
}
}
iNumberTwo = GetNumber(iPos, iNumberTwo);
}
return false;
}
this program works perfect for me , and this is exactly what i want but wat do you mean printf() is for c?
if it is for c, and what is in c++?
thank you.