Ascending primes: Difference between revisions

Line 271:
 
 
stack<Itemunsigned> suspected;
struct Item
{
unsigned lastDigit;
unsigned currentValue;
};
 
 
stack<Item> suspected;
vector<unsigned> primes;
 
 
bool isPrime(unsigned valuen)
{
if (valuen == 0 || valuen == 1)
{
return false;
}
else if (valuen != 2)
{
if (valuen % 2 == 0)
{
return false;
Line 296 ⟶ 289:
else
{
unsigned truncatedSquareRoot = sqrt(valuen);
for (unsigned k = 3; k <= truncatedSquareRoot; k += 2)
if (value % k == 0){
if (n % k == 0)
{
return false;
}
}
}
}
Line 310 ⟶ 307:
for (unsigned k = 1; k <= 9; k++)
{
suspected.push(Item{ k, k });
}
 
while (!suspected.empty())
{
// STL stack in C++ has weird void pop(), i.e. pop() does not return
Item item = suspected.top();
// any value. Thus it is necessary use top() method to read, pop() to
// remove an element from the stack.
//
Itemint itemn = suspected.top();
suspected.pop();
 
if (isPrime(item.currentValuen))
{
primes.push_back(item.currentValuen);
}
 
// The value of n % 10 gives the least significient digit of n
for (unsigned k = item.lastDigit + 1; k <= 9; k++)
//
for (unsigned k = item.lastDigitn % 10 + 1; k <= 9; k++)
{
suspected.push(Item{ k, item.currentValuen * 10 + k });
}
}