Cho một xâu kí tự T, chiều dài không quá 250 kí tự.
a) Đếm số lượng số nguyên tố tạo từ xâu T.
b) Tìm số nguyên tố P, biết P có giá trị nhỏ hơn 105. Dữ liệu cho đảm bảo T chứa ít nhất 1 số nguyên tố.
Dữ liệu vào: Cho tệp P.INP gồm 1 dòng duy nhất là xâu T
Dữ liệu ra: Xuất ra màn hình
- Dòng 1: Số lượng số nguyên tố có được
- Dòng 2: Số P cần tìm
P.INP
Kết quả hiện lên màn hình
Test1234#one5426
4
23
Này bạn đáng lẽ là có 5 số nguyên tố chứ ? (trong xâu có 2 số 2 mà);
Code:
program gty;
uses crt;
var w,q,i,n,j,k,l,z,x:integer;
f1:text;
ss,s,s1,y,s2:string;
f:array[1..100] of string;
a:array[1..1000] of char;
b,c,d:array[1..1000] of integer;
function nt(n:integer):boolean;
var i,s:integer;
kt:boolean;
begin
s:=0;
kt:=false;
for i:=1 to n do
if n mod i=0 then s:=s+1;
if s=2 then kt:=true;
nt:=kt;
end;
function xau(s:string):integer;
var i,n,k,l,p,z:integer;
t:string;
begin
i:=1;
k:=length(s);
z:=0;
repeat
while k>=1 do
begin
t:='';
for j:=i to k do
t:=t+s[j];
val(t,p,l);
if nt(p) then z:=z+1;
k:=k-1;
end;
i:=i+1;
k:=length(s);
until i>length(s);
xau:=z;
end;
function xa(s:string):integer;
var i,k,l,p,z,r,tg:integer;
a:array[1..100] of integer;
t:string;
begin
i:=1;
k:=length(s);
z:=0;
r:=0;
repeat
while k>=1 do
begin
t:='';
for j:=i to k do
t:=t+s[j];
val(t,p,l);
if nt(p) then
begin
r:=r+1;
a[r]:=p;
end;
k:=k-1;
end;
i:=i+1;
k:=length(s);
until i>length(s);
for i:=1 to r-1 do
begin
j:=i+1;
while j<=r do
if (a[j]=a[i])or(a[j]>10000) then
begin
for k:=j to r do
a[k]:=a[k+1];
r:=r-1;
end else j:=j+1;
end;
for i:=1 to r-1 do
for j:=i+1 to r do
if a[i]<a[j] then
begin
tg:=a[i];
a[i]:=a[j];
a[j]:=tg;
end;
xa:=a[1];
end;
begin
clrscr;
assign(f1,'d:\p.inp');
reset(f1);
while not eof(f1) do
readln(f1,s);
close(f1);
for i:=1 to length(s) do
if s[i] in ['0'..'9'] then
begin
n:=n+1;
a[n]:=s[i];
b[n]:=i;
end;
c[1]:=1;
z:=0;
for i:=1 to n do
if b[i]+1<>b[i+1] then
begin
z:=z+1;
d[z]:=i;
c[z+1]:=i+1;
end;
i:=1;x:=0;
repeat
ss:='';
for j:=c[i] to d[i] do
ss:=ss+a[j];
x:=x+1;
f[x]:=ss;
i:=i+1;
until i>z;
w:=xa(f[1]);
for i:=1 to x do
begin
q:=q+xau(f[i]);
if xa(f[i])>=w then w:=xa(f[i]);
end;
writeln('Co ',q,' so nguyen to');
writeln('So nguyen to P:',w);
readln
end.
P/s:code khá dài .....
>>> Nếu bạn luôn buồn phiền hãy dùng hy vọng để chữa trị <<<
Và ...
>>> Không bao giờ nói bạn đã thất bại
Cho đến khi đó là nỗi lực cuối cùng của bạn
Và không bao giờ nói rằng:
Đó là nỗi lực cuối cùng của bạn
Cho tới khi bạn đã thành công >>>
~ Mystic Lâm