Kiểm tra một số có phải là số siêu nguyên tố hay không, số siêu nguyên tố mỗi chữ sô bất kì của nó là số nguyên tố Có thể nêu cách làm cũng được, có cách nào ngắn không thì cho em biết với!
2 câu trả lời
uses crt;
var n,kt:longint;
function nt(a:longint):boolean;
var i:longint;
begin
i:=2;
while(a>1)and(a mod i<>0)do inc(i);
nt:=i=a;
end;
begin
clrscr;
write('n=');readln(n);
repeat
if not(nt(n mod 10)) then kt:=1;
n:=n div 10;
until n=0;
writeln(kt=0);
readln
end.
Đề bài nó có sẵn cách làm luôn rồi đó cậu. Ấy! Mà trả lời như thế thì chết người.
Muốn biết mỗi chữ số bất kì của nó là số nguyên tố hay không, phải kiểm tra nguyên tố trước, số nguyên tố là số chỉ có một và chính nó,chỉ cần chạy từ 2 đến n/2 và tăng đếm, nếu đếm+1=2 thì đó là số nguyên tố
Bây giờ, input ta nhập sẽ là dạng xâu đi ha, mỗi kí tự trong xâu nếu nó là số nguyên tố thì tăng dem, nếu dem=độ dài xâu thì trả kết quả true
Code tham khảo:
Repeat
inc(i);
inc(s[i],k) // k là kí tự xâu s
if nt(k) then kt:=1 else kt=0; // 0 là false, 1 là true
Until i=length(s);
Phải nhớ tạo ctc nguyên tố trước nha
Khuyến mãi cho cậu nè ^^
Function nt(n:longint):boolean;
Var i:longint;
Begin
if n<2 then nt:=false else
begin
while n mod i<>0 do inc(i); // nếu sai thì cậu đổi giúp tớ thành i mod n<>0 nha, cho chắc thôi
nt:=i=n;
end; end;
và function siêu nguyên tố, sau này có làm chỉ cần khai báo một lần cho gọn, thật ra còn một cách, đó là dùng div mod, cái này khá dễ, cậu lên google nha
~
function snt(n:int64):boolean;
begin snt:=true;
while (nt(n)) do n:=n div 10;
if n<>0 then snt:=false;
end;
end;