Bài 1: (7,0 điểm) Số nguyên tố đơn điệu
Số nguyên dương A được gọi là số nguyên tố đơn điệu nếu A thỏa mãn hai tính chất sau:
- A là số nguyên tố.
- A là số có ít nhất hai chữ số mà các chữ số luân phiên tăng giảm hoặc giảm tăng.
Ví dụ: số 53, 79, 101, 617, 6737, 97967 là các số nguyên tố đơn điệu.
Yêu cầu: Viết chương trình cho phép nhập vào một dãy số nguyên có N phần tử (N≤20), các phần tử của dãy có giá trị nhỏ hơn 106.
a) Xuất ra màn hình số lượng các số nguyên tố đơn điệu có trong dãy số trên.
b) Nhập vào số nguyên k (1 < k < 10), xuất ra màn hình số nguyên tố đơn điệu lớn nhất có k chữ số.
Test Nhập Kết quả trên màn hình
1 N = 5
Dãy số: 53 108 79 12 258
K = 2 a) 2
b) 97
2 N = 7
Dãy số: 48 101 58 79 1704 617 97967
K = 5 a) 4
b) 98947
Giải bằng pascal
Quảng cáo
4 câu trả lời 593
program SoNguyenToDonDieu;
uses crt;
const
MAX = 1000000;
var
a: array[1..20] of longint;
n, i, k, dem: integer;
maxDonDieu: longint;
function LaNguyenTo(x: longint): boolean;
var
i: longint;
begin
if x < 2 then exit(false);
for i := 2 to trunc(sqrt(x)) do
if x mod i = 0 then exit(false);
exit(true);
end;
function DonDieu(x: longint): boolean;
var
s: string;
i: integer;
tang: boolean;
begin
str(x, s);
if length(s) < 2 then exit(false); // Phải có ít nhất 2 chữ số
// Kiểm tra luân phiên tăng giảm
if s[1] = s[2] then exit(false); // Hai chữ số đầu bằng nhau không hợp lệ
if s[1] < s[2] then tang := true else tang := false;
for i := 2 to length(s) - 1 do
begin
if tang then
begin
if s[i] >= s[i+1] then exit(false);
end
else
begin
if s[i] <= s[i+1] then exit(false);
end;
tang := not tang; // Luân phiên
end;
exit(true);
end;
function DemChuSo(x: longint): integer;
begin
DemChuSo := length(IntToStr(x));
end;
begin
clrscr;
// Nhập mảng
write('Nhap so luong phan tu N: '); readln(n);
writeln('Nhap ', n, ' so nguyen:');
for i := 1 to n do
read(a[i]);
// Câu a: Đếm số nguyên tố đơn điệu trong dãy
dem := 0;
for i := 1 to n do
if LaNguyenTo(a[i]) and DonDieu(a[i]) then
inc(dem);
writeln('a) So luong so nguyen to don dieu: ', dem);
// Câu b: Tìm số nguyên tố đơn điệu lớn nhất có k chữ số
write('Nhap so nguyen k (1 < k < 10): '); readln(k);
maxDonDieu := -1;
for i := trunc(Power(10, k-1)) to trunc(Power(10, k)) - 1 do
if LaNguyenTo(i) and DonDieu(i) then
if i > maxDonDieu then
maxDonDieu := i;
if maxDonDieu = -1 then
writeln('b) Khong co so nguyen to don dieu co ', k, ' chu so.')
else
writeln('b) So nguyen to don dieu *** nhat co ', k, ' chu so la: ', maxDonDieu);
readln;
end.
chịu thôi
Quảng cáo
Bạn muốn hỏi bài tập?
Câu hỏi hot cùng chủ đề
-
55294
-
31147
-
29746
