Inconsummate numbers in base 10: Difference between revisions
Content added Content deleted
m (Minor code improvement.) |
(New post.) |
||
Line 383: | Line 383: | ||
491 492 493 494 497 |
491 492 493 494 497 |
||
498 516 521 522 527</pre> |
498 516 521 522 527</pre> |
||
=={{header|Java}}== |
|||
<syntaxhighlight lang="java"> |
|||
#include <cstdint> |
|||
#include <iomanip> |
|||
#include <iostream> |
|||
#include <string> |
|||
#include <vector> |
|||
const uint32_t sieve_size = 10'000; |
|||
const uint32_t maximum = 9 * std::to_string(sieve_size).length() * sieve_size; |
|||
std::vector<bool> is_consummate(sieve_size + 1, false); |
|||
uint32_t digital_sum(const uint32_t& number) { |
|||
uint32_t result = 0; |
|||
const std::string text = std::to_string(number); |
|||
for ( const char ch : text ) { |
|||
result += ch - (int) '0'; |
|||
} |
|||
return result; |
|||
} |
|||
void create_is_consummate() { |
|||
for ( uint32_t n = 1; n < maximum; ++n ) { |
|||
uint32_t sum = digital_sum(n); |
|||
if ( n % sum == 0 ) { |
|||
uint32_t quotient = n / sum; |
|||
if ( quotient <= sieve_size ) { |
|||
is_consummate[quotient] = true; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
int main() { |
|||
create_is_consummate(); |
|||
std::vector<uint32_t> inconsummates; |
|||
for ( uint32_t i = 0; i <= sieve_size; ++i ) { |
|||
if ( ! is_consummate[i] ) { |
|||
inconsummates.emplace_back(i); |
|||
} |
|||
} |
|||
std::cout << "The first 50 inconsummate numbers in base 10:" << std::endl; |
|||
for ( uint32_t i = 1; i <= 50; ++i ) { |
|||
std::cout << std::setw(3) << inconsummates[i] << ( i % 10 == 0 ? "\n" : " " ); |
|||
} |
|||
std::cout << "\n" << "The 1,000 inconsummate number is " << inconsummates[1'000] << std::endl; |
|||
} |
|||
</syntaxhighlight> |
|||
{{ out }} |
|||
<pre> |
|||
The first 50 inconsummate numbers in base 10: |
|||
62 63 65 75 84 95 161 173 195 216 |
|||
261 266 272 276 326 371 372 377 381 383 |
|||
386 387 395 411 416 422 426 431 432 438 |
|||
441 443 461 466 471 476 482 483 486 488 |
|||
491 492 493 494 497 498 516 521 522 527 |
|||
The 1,000 inconsummate number is 6996 |
|||
</pre> |
|||
=={{header|Delphi}}== |
=={{header|Delphi}}== |