free pascal最小連續合數

2022-11-01 20:30:23 字數 1320 閱讀 9635

1樓:匿名使用者

首先,s表示a到b之間合數的個數,所以

if yes then s:=b-a;

應改為if yes then s:=b-a-1;

其次dsa[js+a+1]:=2;

應改為dsa[js+a]:=2;

否則答案會多一個數

接著你的程式只能求1000以內的素數,而連續20個素數就大於1000了,你需要增大陣列規模

所以修改後的程式如下:

const

max=10000000;

type

asd=array[1..max]of longint;

varjs,c:longint;

i:longint;

dsa:asd;

procedure sub(x: longint;var yy: boolean);

var k,m:longint;

begin

k:=trunc(sqrt(x));

for m:=3 to k do

if odd(m) then

if x mod m=0 then yy:=false;

end;

procedure abc(t:longint);

vara,b,s:longint;

n:longint;

yes: boolean;

begin

b:=3;

repeat

a:=b;

repeat

yes:=true;

inc(b,2);

sub(b,yes);

if yes then s:=b-a-1;

until yes;

until s>=t;

for n:=a+1 to a+t do begin

dsa[n]:=1;

js:=js+1;

end;

dsa[js+a]:=2;

writeln;

readln

end;

begin

read(c);

abc(c);

for i:=1 to max do begin if dsa[i]=1 then write(i,' ');

if dsa[i]=2 then write(i);

end;

readln;

end.

但這個程式只適用於n比較小的情況,還是過不了n=1000的資料規模。你可以考慮試試篩法求素數

2樓:魔塔玩者

可能輸入大於20的數的時候沒有一個數符合條件

連續自然數的最小公倍數是168那麼這連續自

汗,斷除一列出來,2,2,2,3,7這幾個質數相互乘,很明顯是6,7,8嘛,之和是21 分解質因數 可以得到168 2 2 2 3 7 題中說要連續自然數 所以是6,7,8 6,7,8,三個連續自然數的最小公倍數就是168 168 2x2x2x3x7 即三數必須分別有其中的因數 因為是連續自然數,即...

連續的偶數的和110,這偶數中最小的是

五個連續的偶數的和是110,則 這五個連續偶數的第三個 即中間的那一個 偶數是 110 5 22,即這五個偶數是 18 20 22 24 26 所以最小的偶數是18 故答案為 18 5個連續偶數的和是110,則中間的為110 5 22 所以最小的為18 五個連續偶數的和是100,其中最大的偶數是?最...

連續的自然數,最小的等於五數之和的

設最小的數為x 則5個數字依次為x,x 1,x 2,x 3,x 4方程 x x 1 x 2 x 3 x 4 6 x 5x 10 6 x 5x 10 6x x 10 所以5個數字分別為10,11,12,13,14和是10 11 12 13 14 60 設這5個數為x 2 x 1 x x 1 x 2x ...