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;

Câu hỏi trong lớp Xem thêm