pascal选数已知 n 个整数 x1,x2,…,xn,以及一个整数 k(k<n).从 n 个整数中任选 k 个整数相加
来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/09/24 01:22:57
pascal选数
已知 n 个整数 x1,x2,…,xn,以及一个整数 k(k<n).从 n 个整数中任选 k 个整数相加,可分别得到一系列的和.例如当 n=4,k=3,4 个整数分别为 3,7,12,19 时,可得全部的组合与它们的和为: 3+7+12=22 3+7+19=29 7+12+19=38 3+12+19=34. 现在,要求你计算出和为素数共有多少种. 例如上例,只有一种的和为素数:3+7+19=29).
输入:
n ,k (1< =n< =20,k<n) x1,x2,…,xn (1< =xi< =5000000
输出:
一个整数(满足条件的种数).
样例输入:
4 3
3 7 12 19
样例输出:
1
(用素数比素数,有筛法求素数,说简单一点就是:使时间复杂度尽可能低.重要的几句代码要有注释,越多越好)
答的好加赏!
已知 n 个整数 x1,x2,…,xn,以及一个整数 k(k<n).从 n 个整数中任选 k 个整数相加,可分别得到一系列的和.例如当 n=4,k=3,4 个整数分别为 3,7,12,19 时,可得全部的组合与它们的和为: 3+7+12=22 3+7+19=29 7+12+19=38 3+12+19=34. 现在,要求你计算出和为素数共有多少种. 例如上例,只有一种的和为素数:3+7+19=29).
输入:
n ,k (1< =n< =20,k<n) x1,x2,…,xn (1< =xi< =5000000
输出:
一个整数(满足条件的种数).
样例输入:
4 3
3 7 12 19
样例输出:
1
(用素数比素数,有筛法求素数,说简单一点就是:使时间复杂度尽可能低.重要的几句代码要有注释,越多越好)
答的好加赏!
program kkk;
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))do{大可不必用筛法了,直接判断}
if 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.
可以了吧.
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))do{大可不必用筛法了,直接判断}
if 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.
可以了吧.
pascal选数已知 n 个整数 x1,x2,…,xn,以及一个整数 k(k<n).从 n 个整数中任选 k 个整数相加
pascal程序 定义一函数digit(n,k) 使得他回送整数n的从右边开始数第k个数字的值
找一个函数对于整数自变量X1,X2,.,Xn,构造一个函数f(X1,X2,.,Xn),使得n个自变量中任何一个有小改变(
c语言:定义一个函数digit(n,k),它返回整数n的从右边开始数的第k个数字的值
pascal金字塔编写一个程序,输入两个整数N和K(N,K
K个整数(n1,n2,n3.nk)相加等于n,所有ni*(ni-1)/2求和的最大值是多少?
在程序中定义一个函数digit(n,k),它能分离出整数n从右边数第k个数字,如digit(31859,3)=8,dig
输入n个整数,输出其中最小的k个 JS做
设n和k为>1的整数,n<2^k,求证:存在2k个整数,将他们任意分成两组,则总有一组有若干个数的和被N整除
pascal 读入n及n个整数,统计n个整数中有多少个素数,把结果输出到屏幕.注意:n
pascal程序设计 输入一个整数n,n
a1.a2.……an n个整数 证明存在i,k使a(i+1)+a(i+2)+……+a(i+k)能被n整除