pascal選數,pascal程式 選數

時間 2022-02-05 15:45:10

1樓:匿名使用者

var n,s,i,p,x,ans:longint;

k:qword;

a:array[1..5000000] of longint;

procedure init;

var i:longint;

begin

read(n,k);

for i:=1 to n do

read(a[i]);

ans:=0;

end;

function ok(x:longint):boolean;

var i:longint;

begin

ok:=true;

for i:=2 to trunc(sqrt(x))doif x mod i=0 then

begin

ok:=false;

break;

end;

end;

procedure run(s,i,p:longint);

var j:longint;

begin

if p=k+1 then

begin

if ok(s)then

inc(ans);

exit;

end;

for j:=i+1 to n do

run(s+a[j],j,p+1);

end;

begin

init;

run(s,i,p);

writeln(ans);

end.

2樓:匿名使用者

你把你要的輸入輸出要求說一下

pascal程式:選數

3樓:匿名使用者

型別:搜尋

題解:本題動態規劃無從下手,也無數學公式可尋,看來只能搜尋(組合的生成演算法),其實1<=n<=20這個約束條件也暗示我們本題搜尋是有希望的,組合的生成可用簡單的dfs來實現,既搜尋這k個整數在原數列中的位置,由於組合不同於排列,與這k個數的排列順序無關,所以我們可以令a[i]1)是否為素數最簡單的方法就是看是否存在乙個素數a(a<=sqrt(p))是p的約數,如果不存在,該數就為素數,由於在此題中1<=xi<=5000000,n<=20,所以要判斷的數p不會超過100000000,sqrt(p)<=10000,因此,為了加快速度,我們可以用篩選法將2…10000之間的素數儲存到乙個陣列裡(共1229個),這樣速度估計將提高5~6倍。

特別注意:本題是要求使和為素數的情況有多少種,並不是求有多少種素數,比賽時就有很多同學胡亂判重而丟了12分;還有1不是素數,在判素數時要對1做特殊處理。

標程:pascal

program c2;

const

maxn = 20;

varn, m, i: byte;

ans, s: longint;

x: array[1 .. maxn] of longint;

f: array[1 .. 10000] of byte;

p: array[1 .. 1229] of integer;

procedure get_prime;

vari, j, s: integer;

begin

s := 0;

f[1] := 0;

for i := 2 to 10000 do f[i] := 1;

for i := 2 to 10000 doif f[i] = 1 then

begin

inc(s); p[s] := i;

j := 2 * i;

while j <= 10000 do begin f[j] := 0; inc(j, i) end;

endend;

procedure work(s: longint);

vari: integer;

begin

if s <= 10000 then inc(ans, f[s])else

begin

i := 1;

while sqr(longint(p[i])) <= s dobegin

if s mod p[i] = 0 then exit;

inc(i)

end;

inc(ans)

endend;

procedure search(d, pre: byte);

vari: byte;

begin

for i := pre + 1 to n - (m - d) dobegin

inc(s, x[i]);

if d = m then work(s)else search(d + 1, i);

dec(s, x[i])

endend;

begin

readln(n, m);

for i := 1 to n do read(x[i]);

ans := 0; s := 0;

get_prime;

search(1, 0);

writeln(ans)

end.

乙個神牛的題解.......

pascal數的統計

4樓:匿名使用者

var:a,b,c:longint;

s:string;

begin

readln(a);

c:=0;

for b:=9 to a do beginstr(b,s);

if pos('0',s)<>0 then c:=c+1;

end;

writeln(c);

end.

//空行為讀寫檔案留

5樓:

如果說問有多少個0反而還會做..問多少個數有0反而不會做了t t..

看看有沒有高人

不行就只能像樓上那樣暴力拿70了...

PASCAL問題,Pascal問題

歷年noip。找源程式太容易了吧 pascal問題 第五題 program lsh5 vara,b,n,x,p integer t array 1.100 ofinteger begin readln n fora 1ton div2 1 dobegin x 0 p a forb a 1ton di...

pascal問題,pascal問題

這是第一題 var i,j,a,n,s,t longint begin readln a,n for i 1 to n do begin s 0 for j 0 to i 1 do begin inc s,a round exp j ln 10 end inc t,s end writeln t r...

pascal題目非常數,求程式,pascal題目非常數,求程式

var n,i longint function sum k longint longint var i,s longint begin s 0 i 2 while k 1 do begin while k mod i 0 do begin s s i k k div i end inc i end...