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 ...