Application Development 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: 

code for prime number

Former Member
0 Kudos

Dear Experts

Again This is venky

Display between 1 to 100 prime numbers ? write abap program for that.

prime number : - a number which is divisable by 1 or itself.

Advance in Thnx

3 REPLIES 3

Former Member
0 Kudos

Hi Venkatesh

Check this out u will find a solution for your question

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.

check the p_nbpr checkbox to get the number of prime numbers within that number.

Regards,

Santosh

Former Member
0 Kudos

HI

CHECK THIS THREAD

HOPE THIS HELPS,

PRIYA

Former Member
0 Kudos

PARAMETERS low TYPE i.

PARAMETERS high TYPE i.

DATA num TYPE i.

DATA is_prime.

num = low.

DO.

PERFORM prime.

IF is_prime EQ 'X'.

WRITE: / num.

ENDIF.

num = num + 1.

IF num GT high.

EXIT.

ENDIF.

ENDDO.

FORM prime.

DATA i TYPE i VALUE 2.

DATA mod TYPE i.

is_prime = 'X'.

DATA max TYPE i.

DATA cnt TYPE i VALUE 0.

max = num / 2.

IF num EQ 4.

is_prime = ' '.

EXIT.

ENDIF.

DO.

IF i GE max.

is_prime = 'X'.

EXIT.

ENDIF.

mod = num MOD i.

IF mod EQ 0. "Not prime

is_prime = ' '.

EXIT.

ENDIF.

cnt = cnt + 1.

IF cnt GT max.

EXIT.

ELSE.

i = i + 1.

ENDIF.

ENDDO.