Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Prime numbers

Former Member
0 Likes
1,965

how to display prime numbers from 1 to 100.

regards

savita

8 REPLIES 8
Read only

Former Member
0 Likes
1,003

Hi

try this program

PROGRAM zprimes.

DATA: BEGIN OF primes OCCURS 0,

number TYPE i,

exp TYPE i,

END OF primes.

DATA: w_mult TYPE i,

w_limi TYPE i,

w_prem TYPE i.

DATA: w_outp TYPE text132.

DATA: w_rtime TYPE i,

w_stime TYPE p DECIMALS 3.

DEFINE add_part.

sy-fdpos = strlen( &1 ) + 1.

&1+sy-fdpos(*) = &2.

condense &1.

END-OF-DEFINITION.

PARAMETERS: p_numb TYPE i, "number to check

p_fact TYPE c AS CHECKBOX, "display components

p_nbpr TYPE c AS CHECKBOX. "nb of primes

START-OF-SELECTION.

GET RUN TIME FIELD w_rtime.

IF p_nbpr IS INITIAL OR p_numb LE 12000.

PERFORM eratostene USING p_numb.

add_part w_outp p_numb.

READ TABLE primes WITH KEY number = p_numb.

IF sy-subrc = 0.

add_part w_outp 'is prime'.

ELSE.

IF p_fact IS INITIAL.

add_part w_outp 'is not prime'.

ELSE.

add_part w_outp '='.

w_limi = p_numb.

LOOP AT primes WHERE exp GT 0.

CHECK primes-number LE w_limi.

IF w_prem GT 0.

add_part w_outp '*'.

ENDIF.

IF primes-exp GT 1.

add_part w_outp '('.

add_part w_outp primes-number.

add_part w_outp '^'.

add_part w_outp primes-exp.

add_part w_outp ')'.

ELSE.

add_part w_outp primes-number.

ENDIF.

w_limi = w_limi / ( primes-number ** primes-exp ).

IF w_limi = 1.

EXIT.

ENDIF.

w_prem = 1.

ENDLOOP.

ENDIF.

ENDIF.

WRITE: / w_outp.

IF NOT p_nbpr IS INITIAL.

DESCRIBE TABLE primes LINES sy-tmaxl.

CLEAR: w_outp.

add_part w_outp 'Number of primes:'.

add_part w_outp sy-tmaxl.

WRITE: / w_outp.

SKIP.

LOOP AT primes.

WRITE: / primes-number.

ENDLOOP.

ENDIF.

ELSE.

PERFORM factors.

ENDIF.

GET RUN TIME FIELD w_rtime.

w_stime = w_rtime / 1000000.

SKIP.

CLEAR: w_outp.

add_part w_outp 'Calculation time:'.

add_part w_outp w_stime.

WRITE: / w_outp.

----


  • FORM eratostene *

----


FORM eratostene USING in_number TYPE i.

DATA: BEGIN OF no_primes OCCURS 0,

number TYPE i,

END OF no_primes.

DATA: cnum TYPE i,

dnum TYPE i,

limi TYPE i,

mult TYPE i,

puis TYPE i,

cmod TYPE i.

IF NOT ( p_fact IS INITIAL AND p_nbpr IS INITIAL ).

limi = in_number.

ELSE.

limi = sqrt( in_number ).

ENDIF.

cnum = 2.

WHILE cnum LE limi.

READ TABLE no_primes WITH KEY number = cnum.

IF sy-subrc NE 0.

primes-number = cnum.

mult = 2.

puis = 1.

dnum = mult * cnum.

WHILE dnum LE in_number.

READ TABLE no_primes WITH KEY number = dnum.

IF sy-subrc NE 0.

no_primes-number = dnum.

APPEND no_primes.

ENDIF.

IF NOT p_fact IS INITIAL.

cmod = dnum MOD ( cnum ** puis ).

IF cmod = 0.

cmod = in_number MOD ( cnum ** puis ).

IF cmod = 0.

primes-exp = puis.

puis = puis + 1.

ENDIF.

ENDIF.

ENDIF.

mult = mult + 1.

dnum = mult * cnum.

ENDWHILE.

APPEND primes.

CLEAR: primes.

ENDIF.

cnum = cnum + 1.

ENDWHILE.

ENDFORM.

----


  • FORM factors *

----


FORM factors.

DATA: ex_factors TYPE string,

mod TYPE i,

still TYPE f,

factor TYPE i,

exponent TYPE i,

square TYPE f,

fac_string TYPE text40,

exp_string TYPE text40.

IF p_numb LE 3.

ex_factors = p_numb.

ELSE.

factor = 2.

still = p_numb.

DO.

CLEAR: exponent.

mod = still MOD factor.

WHILE mod = 0.

exponent = exponent + 1.

still = still div factor.

mod = still MOD factor.

ENDWHILE.

IF exponent EQ 1.

fac_string = factor.

CONCATENATE ex_factors '*' fac_string

INTO ex_factors

SEPARATED BY space.

CONDENSE ex_factors.

ELSEIF exponent GT 1.

fac_string = factor.

exp_string = exponent.

CONCATENATE ex_factors '* (' fac_string

'^' exp_string ')'

INTO ex_factors

SEPARATED BY space.

CONDENSE ex_factors.

ENDIF.

factor = factor + 1.

square = factor ** 2.

IF square GT still.

EXIT.

ENDIF.

ENDDO.

IF still GT 1.

CATCH SYSTEM-EXCEPTIONS convt_overflow = 1.

fac_string = factor = still.

ENDCATCH.

IF sy-subrc NE 0.

fac_string = still.

ENDIF.

CONCATENATE ex_factors '*' fac_string

INTO ex_factors

SEPARATED BY space.

CONDENSE ex_factors.

ENDIF.

SHIFT ex_factors UP TO '*'.

SHIFT ex_factors BY 2 PLACES.

ENDIF.

WRITE: / p_numb RIGHT-JUSTIFIED.

IF ex_factors CA '*^'.

WRITE: '=', ex_factors.

ELSE.

WRITE: 'is prime'.

ENDIF.

ENDFORM.

<b>check the p_nbpr checkbox to get the number of prime numbers within that number.</b>

regards

kishore

Message was edited by: Harikishore Sreenivasulu

Read only

Former Member
0 Likes
1,003

Hi Savita,

Report YXYZ.

data : j type i value 1.

data : n type i value 100.

data : cnt type i.

data : n1 type i.

data : ans type i.

while j <= n.

n1 = j.

clear cnt.

while n1 <> 0.

ans = j mod n1.

if ans = 0.

cnt = cnt + 1.

endif.

n1 = n1 - 1.

endwhile.

if cnt = 2 or cnt = 1.

write 😕 j.

endif.

j = j + 1.

endwhile.

Regards,

Digesh Panchal

Read only

former_member186741
Active Contributor
0 Likes
1,003

data: l_current_num type i, l_quo type i.

data rem type i.

do 100 times.

l_current_num = sy-index.

break-point.

clear rem.

do 50 times.

l_quo = sy-index.

check l_quo <> '1'.

if l_quo = l_current_num. rem = '1'. exit. endif.

rem = l_current_num mod l_quo.

if rem = 0. exit. endif.

enddo.

if rem <> 0.

write:/ l_current_num.

endif.

enddo.

Message was edited by: Neil Woodruff

Read only

Former Member
0 Likes
1,003

Hi,

<b>Check these links:</b>

Please reward the solved & useful answers.

Best Regards,

Anjali

Read only

hymavathi_oruganti
Active Contributor
0 Likes
1,003

An integer p > 1 is prime if and only if the factorial (p &#8722; 1)! + 1 is divisible by p .

data: k type i.

parameter p type i.

at selection-screen.

if (p < = 1).

message 'enter value graeter than 1' type 'E'.

endif.

start-of-selection.

k = p - 1.

perform fact_of_k.

k = k + 1.

if k mod p = 0.

write 'p is prime'.

endif.

form fact_of_k.

data: temp type i.

temp = k - 1.

while (k <= 1).

k = k * temp.

k = k - 1.

endwhile.

endform.

Read only

0 Likes
1,003

hi again,

small printing mistake in above, corrected below.

An integer p > 1 is prime if and only if the factorial

(p - 1)! + 1 is divisible by p .

Read only

Former Member
0 Likes
1,003

REPORT Z895_PRIME.

data : num type i value 3,

max type i,rem type i,div type i value 2,

flag type boolean.

do.

max = num div 2.

do.

rem = num mod div.

if rem = 0 .

flag = 1.

exit.

endif.

div = div + 1.

if div > max.

exit.

endif.

enddo.

if flag = 0.

write:/ num.

endif.

flag = 0.

num = num + 1.

div = 2.

if num > 100.

exit.

endif.

enddo.

Read only

former_member186741
Active Contributor
0 Likes
1,003

if any of the responses solve your problem please award points and close the thread.