Primes whose sum of digits is 25: Difference between revisions

From Rosetta Code
Content added Content deleted
(Created page with "{{Draft task}} ;Task: Show primes which sum of digits is '''25''' <br> Let '''0 < n < 5000''' =={{header|Ring}}== <lang ring> load "stdlib.ring" row = 0 limit1 = 25 limit2...")
 
(Added phix and stretch goal)
Line 4: Line 4:
Show primes which sum of digits is '''25'''
Show primes which sum of digits is '''25'''
<br> Let '''0 < n < 5000'''
<br> Let '''0 < n < 5000'''

;Stretch goal
Show the total number of all such primes that do not contain any zeroes.

=={{header|Phix}}==
<lang Phix>function sum25(integer p) return sum(sq_sub(sprint(p),'0'))=25 end function
sequence res = filter(get_primes_le(5000),sum25)
string r = join(shorten(apply(res,sprint),"",4))
printf(1,"%d sum25 primes less than 5000 found: %s\n",{length(res),r})</lang>
{{out}}
<pre>
17 sum25 primes less than 5000 found: 997 1699 1789 1879 ... 4597 4759 4957 4993
</pre>
Stretch goal
<lang Phix>include mpfr.e
atom t0 = time(), t1 = time()+1
mpz pz = mpz_init(0)

function sum25(string p, integer rem, res=0)
if rem=0 then
if find(p[$],"1379") then -- (saves 13s)
mpz_set_str(pz,p)
if mpz_prime(pz) then
res += 1
if time()>t1 then
progress("%d, %s...",{res,p})
t1 = time()+1
end if
end if
end if
else
for i=1 to min(rem,9) do
res = sum25(p&'0'+i,rem-i,res)
end for
end if
return res
end function
printf(1,"There are %,d sum25 primes that contain no zeroes\n",sum25("",25))
?elapsed(time()-t0)</lang>
{{out}}
<pre>
There are 1,525,141 sum25 primes that contain no zeroes
"1 minute and 27s"
</pre>



=={{header|Ring}}==
=={{header|Ring}}==

Revision as of 04:20, 21 March 2021

Primes whose sum of digits is 25 is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.
Task

Show primes which sum of digits is 25
Let 0 < n < 5000

Stretch goal

Show the total number of all such primes that do not contain any zeroes.

Phix

<lang Phix>function sum25(integer p) return sum(sq_sub(sprint(p),'0'))=25 end function sequence res = filter(get_primes_le(5000),sum25) string r = join(shorten(apply(res,sprint),"",4)) printf(1,"%d sum25 primes less than 5000 found: %s\n",{length(res),r})</lang>

Output:
17 sum25 primes less than 5000 found: 997 1699 1789 1879 ... 4597 4759 4957 4993

Stretch goal <lang Phix>include mpfr.e atom t0 = time(), t1 = time()+1 mpz pz = mpz_init(0)

function sum25(string p, integer rem, res=0)

   if rem=0 then
       if find(p[$],"1379") then -- (saves 13s)
           mpz_set_str(pz,p)
           if mpz_prime(pz) then
               res += 1
               if time()>t1 then
                   progress("%d, %s...",{res,p})
                   t1 = time()+1
               end if
           end if
       end if
   else
       for i=1 to min(rem,9) do
           res = sum25(p&'0'+i,rem-i,res)
       end for
   end if
   return res

end function

printf(1,"There are %,d sum25 primes that contain no zeroes\n",sum25("",25)) ?elapsed(time()-t0)</lang>

Output:
There are 1,525,141 sum25 primes that contain no zeroes
"1 minute and 27s"


Ring

<lang ring> load "stdlib.ring"

row = 0 limit1 = 25 limit2 = 5000

for n = 1 to limit2

   if isprime(n)
      bool = sum25(n)
      if bool = 1
         row = row + 1
         see "" + n + " "
         if (row%5) = 0
             see nl
         ok
      ok
   ok

next

func sum25(n)

    sum = 0
    str = string(n)
    for n = 1 to len(str)
        sum = sum + number(str[n])
    next
    if sum = limit1
       return 1
    ok

</lang>

Output:
997 1699 1789 1879 1987 
2689 2797 2887 3499 3697 
3769 3877 3967 4597 4759 
4957 4993