Tìm các thừa số nguyên tố


23

Trong tác vụ này, bạn phải viết một chương trình, tính toán các thừa số nguyên tố của một số. Đầu vào là số tự nhiên 1 <n <2 ^ 32. Đầu ra là một danh sách các thừa số nguyên tố của số theo định dạng sau. Các số mũ phải được bỏ qua nếu chúng là 1. Chỉ các số nguyên tố đầu ra. (Giả sử đầu vào là 131784):

131784 = 2 ^ 3 * 3 * 17 ^ 2 * 19

Không cần sử dụng cùng một lượng khoảng trắng; khoảng trắng có thể được chèn vào bất cứ nơi nào thích hợp. Chương trình của bạn sẽ hoàn thành sau ít hơn 10 phút cho bất kỳ đầu vào nào. Chương trình có số lượng nhân vật ngắn nhất sẽ thắng.


9
Điểm thưởng nếu chương trình của bạn có thể là hệ số 685759991434940397765474496717275817990411426461294732612716997613329698095145054278980888450430107555068646480230401979540275467066031861666666
Joey Adams

@Joey Adams: Hệ số bắt đầu với 17 * 71 * 113 * 997 * 313597 ...
FUZxxl

3
@FUZxxl: Tôi nghĩ bạn đã nhầm khi sao chép số. Đây là sản phẩm của hai số nguyên tố lớn .
Joey Adams

@Joey Chúng ta có thể sử dụng Thuật toán của Shor không?
Mateen Ulhaq

23
@Joey Tôi vô tình làm đổ một ít cà phê qua máy tính lượng tử của mình và bạn tôi đang sử dụng để "hack vào Chính phủ Hoa Kỳ" hoặc một cái gì đó không quan trọng, vì vậy, không. :(
Mateen Ulhaq

Câu trả lời:


11

SageMath, 31 byte

N=input()
print N,"=",factor(N)

Trường hợp thử nghiệm: 83891573479027823458394579234582347590825792034579235923475902312344444 Đầu ra:

83891573479027823458394579234582347590825792034579235923475902312344444 = 2^2 * 3^2 * 89395597 * 98966790508447596609239 * 263396636003096040031295425789508274613


Chúc mừng bạn đã chiến thắng một thử thách với bài đăng đầu tiên của mình, làm tốt lắm! Và chào mừng đến với trang web!
DJMcMayhem

8

Ruby 1.9, 74 70 ký tự

#!ruby -plrmathn
$_+=?=+$_.to_i.prime_division.map{|a|a[0,a[1]]*?^}*?*

Chỉnh sửa:

  • (74 -> 70) Chỉ cần sử dụng số mũ dưới dạng độ dài lát thay vì kiểm tra rõ ràng exponent > 1

7

Perl 5.10, 73 88

perl -pe '$_=`factor $_`;s%( \d+)\K\1+%-1-length($&)/length$1%ge;y, -,*^,;s;\D+;=;'

Lấy số đầu vào từ đầu vào tiêu chuẩn. Sẽ tính toán các yếu tố cho nhiều đầu vào nếu được cung cấp.

Được tính là một sự khác biệt để perl -e. 5.10 là cần thiết cho \Kmetacharacter regex.


+1 để sử dụng factor.
st0le

Bạn không nên đếm ptùy chọn?
Joey

@Joey thực sự tôi nên. Xin lỗi vì điều đó. Sửa chữa.
JB

Không thử nghiệm điều này, nhưng thay vì split/\D/,~factor $_~;$_="@_";bạn có thể viết $_=~factor $_~;s/\D/ /g;? (Tất nhiên thay thế ~bằng backtick.)
Timwi

Ý bạn là $_=`factor $_`;s/\D/ /g;sao? Backtick kép bao gồm giúp.
aaaaaaaaaaaa

5

OCaml, 201 ký tự

Một bản dịch bắt buộc trực tiếp của mã Python tốt nhất:

let(%)s d=if!d>1then Printf.printf"%s%d"s!d
let f n=let x,d,e,s=ref n,ref 1,ref 0,ref"="in""%x;while!d<65536do
incr d;e:=0;while!x mod!d=0do x:=!x/ !d;incr e
done;if!e>0then(!s%d;"^"%e;s:="*")done;!s%x

Ví dụ,

# f 4294967292;;
4294967292=2^2*3^2*7*11*31*151*331- : unit = ()

(lưu ý rằng tôi đã bỏ qua việc đưa ra kết thúc cuối cùng.) Chỉ để giải trí, với 213 ký tự, một phiên bản hoàn toàn có chức năng, hoàn toàn bị xáo trộn thông qua việc sử dụng các toán tử tự do:

let(%)s d=if d>1then Printf.printf"%s%d"s d
let f x=let s=ref"="in""%x;let rec(@)x d=if d=65536then!s%x else
let rec(^)x e=if x/d*d<x then x,e else x/d^e+1in
let x,e=x^0in if e>0then(!s%d;"^"%e;s:="*");x@d+1in x@2

5

Python, 140 135 133 ký tự

M=N=input()
s=''
f=1
while f<4**8:
 f+=1;e=0
 while N%f<1:e+=1;N/=f
 if e:s+='*%d'%f+'^%d'%e*(e>1)
print M,'=',(s+'*%d'%N*(N>1))[1:]

Tôi nghĩ rằng đầu ra đòi hỏi một số không gian hơn, ví dụ ' * %d'... Và hai điều nữa : 65536 == 4**8; Dòng 7:if e:s+='*%d'%f+'^%d'%e*(e>1)
Oleh Prypin

@BlaXpirit: "không cần một khoảng trắng giống nhau". Cảm ơn hai người kia, tôi sẽ kết hợp chúng.
Keith Randall

5

J, 72

(":*/f),'=',([,'*',])/(":"0~.f),.(('^',":)`(''"0)@.(=&1))"0+/(=/~.)f=.q:161784

Điển hình J. Hai nhân vật làm hầu hết công việc, sáu mươi nhân vật để trình bày nó.

Chỉnh sửa: Đã sửa lỗi số ký tự.


2
Điều này không giống 62 ký tự đối với tôi. Ngay cả khi giả sử 161784là đầu vào của bạn, nó vẫn có 72 ký tự.
Ventero

Nó sẽ không ngắn hơn với |: __ q: y?
Eelvex

2
@Ventero: JB điển hình. Hai giờ để đánh golf thứ đáng nguyền rủa, mười lăm giây để làm rối tung số lượng nhân vật.
JB

5

J, 53 52 ký tự

Giải pháp này lấy rplcmẹo từ giải pháp của Randomra nhưng cũng đưa ra một số ý tưởng ban đầu.

":,'=',(":@{.,'^','*',~":@#)/.~@q:}:@rplc'^1*';'*'"_

Trong ký hiệu không ngầm, chức năng này trở thành

f =: 3 : 0
(": y) , '=' , }: (g/.~ q: y) rplc '^1*' ; '*'
)

nơi gđược định nghĩa là

g =: 3 : 0
": {. y) , '^' , (": # y) , '*'
)
  • q: ylà vectơ của các thừa số nguyên tố của y. Ví dụ, q: 60sản lượng 2 2 3 5.
  • x u/. yáp dụng ucho y khóa bởi x, nghĩa là, uđược áp dụng cho các vectơ của các phần tử ymà các mục trong xđó bằng nhau. Điều này hơi phức tạp để giải thích, nhưng trong trường hợp đặc biệt y u/. yhoặc u/.~ y, uđược áp dụng cho từng vectơ của các phần tử riêng biệt trong yđó mỗi phần tử được lặp lại thường xuyên như khi nó xuất hiện y. Chẳng hạn, </.~ 1 2 1 2 3 1 2 2 3sản lượng

    ┌─────┬───────┬───┐
    │1 1 1│2 2 2 2│3 3│
    └─────┴───────┴───┘
    
  • # ysố liệu của y, đó là, số lượng các mục trong y.

  • ": y định dạng y như một chuỗi.
  • x , y nối xy .
  • {. ylà cái đầu y , nghĩa là, mục đầu tiên của nó.
  • Do đó, (": {. y), '^' , (": # y) , '*'định dạng một vectơ n lặp lại của một số k thành một chuỗi có dạng k ^ n *. Cụm từ này trong ký hiệu ngầm là :@{.,'^','*',~":@#, mà chúng tôi chuyển đến trạng từ /.được mô tả thêm ở trên.
  • x rplc ylà chức năng thư viện thay thế các ký tự. ycó dạng a ; bvà mọi thể hiện của chuỗi atrong xđược thay thế bằng b. xbị phá hủy (nghĩa là được định hình lại sao cho nó có thứ hạng 1) trước khi hoạt động diễn ra, được sử dụng ở đây. Mã này thay thế ^1*bằng *để tuân thủ định dạng đầu ra được ủy quyền.
  • }: ylà giới hạn của y, đó là, tất cả trừ mục cuối cùng của nó. Điều này được sử dụng để loại bỏ các dấu *.

Bạn không thể tiết kiệm rất nhiều công việc bằng cách sử dụng __ q:? Hãy thử trực tuyến!
Adám

@ Adám Thật vậy, ý kiến ​​hay!
FUZxxl

4

PHP, 112

echo$n=$_GET[0],'=';$c=0;for($i=2;;){if($n%$i<1){$c++;$n/=$i;}else{if($c){echo"$i^$c*";}$c=0;if(++$i>$n)break;}}

118

echo $n=$_GET[0],'=';for($i=2;;){if(!($n%$i)){++$a[$i];$n/=$i;}else{if($a[$i])echo "$i^$a[$i]*";$i++;if($i>$n)break;}}

3

Python 119 Chars

M=N=input()
i=1
s=""
while N>1:
 i+=1;c=0
 while N%i<1:c+=1;N/=i
 if c:s+=" * %d"%i+['','^%d'%c][c>1]
print M,'=',s[3:]

1
Đó là những gì tôi đã thử đầu tiên, nhưng nó quá chậm đối với các số nguyên tố lớn, như 4294967291.
Keith Randall

@Keith The question allows upto 10 minutes. Will this take more than 10 minutes for the worst case?
fR0DDY

2
It took 32 minutes on my machine for that number.
Keith Randall

3

JavaScript, 124 122 119

for(s='',i=2,o=p=prompt();i<o;i++){for(n=0;!(p%i);n++)p/=i;n?s+=i+(n-1?'^'+n:'')+'*':0}alert(s.substring(0,s.length-1))

3

Perl, 78

use ntheory":all";say join" * ",map{(join"^",@$_)=~s/\^1$//r}factor_exp(shift)

It uses the s///r feature of Perl 5.14 to elide the ^1s. 81 characters to run in a loop:

perl -Mntheory=:all -nE 'chomp;say join" * ",map{(join"^",@$_)=~s/\^1$//r}factor_exp($_);'

Bạn có thể bỏ không gian nếu bạn thích. Điều này sẽ cứu hai nhân vật. Giải pháp tốt đẹp!
FUZxxl

2

PHP, 236 ký tự

$f[$n=$c=$argv[1]]++;echo"$n=";while($c){$c=0;foreach($f as$k=>$n)for($r=~~($k/2);$r>1;$r--){if($k%$r==0){unset($f[$k]);$f[$r]++;$f[$k/$r]++;$c=1;break;}}}foreach($f as$k=>$n)if(--$n)$f[$k]="$k^".++$n;else$f[$k]=$k;echo implode("*",$f);

Đầu ra cho 131784: 2 ^ 3 * 3 * 17 ^ 2 * 19

Hoàn thành tất cả các số trong vòng vài giây trong khi thử nghiệm.

4294967296=2^32
Time: 0.000168

Đầu vào không bao giờ được chỉ định, vì vậy tôi đã chọn gọi nó bằng các đối số dòng lệnh.

php factorize.php 4294967296

2

Scala 374:

def f(i:Int,c:Int=2):List[Int]=if(i==c)List(i)else 
if(i%c==0)c::f(i/c,c)else f(i,c+1)
val r=f(readInt)
class A(val v:Int,val c:Int,val l:List[(Int,Int)])
def g(a:A,i:Int)=if(a.v==i)new A(a.v,a.c+1,a.l)else new A(i,1,(a.v,a.c)::a.l)
val a=(new A(r.head,1,Nil:List[(Int,Int)])/:(r.tail:+0))((a,i)=>g(a,i))
a.l.map(p=>if(p._2==1)p._1 else p._1+"^"+p._2).mkString("", "*", "")

vô dụng:

def factorize (i: Int, c: Int = 2) : List [Int] = {
  if (i == c) List (i) else 
    if (i % c == 0) c :: f (i/c, c) else 
      f (i, c+1)
}
val r = factorize (readInt)
class A (val value: Int, val count: Int, val list: List [(Int, Int)])
def g (a: A, i: Int) = 
  if (a.value == i) 
    new A (a.value, a.count + 1, a.list) else 
    new A (i, 1, (a.value, a.count) :: a.list)
val a = (new A (r.head, 1, Nil: List[(Int,Int)]) /: (r.tail :+ 0)) ((a, i) => g (a, i))
a.l.map (p => if (p._2 == 1) p._1 else
  p._1 + "^" + p._2).mkString ("", "*", "")

2

J, 74 ký tự

f=.3 :0
(":y),'=',' '-.~('^1 ';'')rplc~}:,,&' *'"1(,'^'&,)&":/"{|:__ q:y
)

   f 131784
131784=2^3*3*17^2*19

64 ký tự có đầu vào biến x:

   x=.131784

   (":x),'=',' '-.~('^1 ';'')rplc~}:,,&' *'"1(,'^'&,)&":/"{|:__ q:x
131784=2^3*3*17^2*19

Nếu bạn quản lý để biến điều này thành một định nghĩa ngầm, bạn có thể tránh thoát tất cả các trích dẫn. Bạn cũng có thể sử dụng một định nghĩa 3 : 0.
FUZxxl

@FUZxxl Tôi dự kiến ​​tôi chỉ có thể đưa vào chuỗi không thoát trong 3 : 0phiên bản nhưng nó không hoạt động. Tôi có thể thử ngầm sau. Đây là 3: 0 tôi đã thử: pastebin.com/rmTVAk4j .
ngẫu nhiên

Nó nên hoạt động. Tôi không hiểu tại sao. Bạn đã đặt tên cho cuộc tranh luận của bạn ynhư bạn được yêu cầu?
FUZxxl

@FUZxxl Đây là 3: 0 tôi đã thử: pastebin.com/rmTVAk4j .
ngẫu nhiên

Tỷ lệ 3: 0 bạn đã thử không khớp chính xác với lớp lót bạn cung cấp. Nó sử dụng ''thay vì a:ở một nơi. Có lẽ đó là sự khác biệt?
FUZxxl

2

Java 10, 109 108 byte (hàm lambda) (không cạnh tranh theo yêu cầu của OP)

n->{var r=n+"=";for(int i=1,f;i++<n;r+=f<1?"":(f<2?i:i+"^"+f)+(n>1?"*":""))for(f=0;n%i<1;n/=i)f++;return r;}

Hãy thử trực tuyến.

Java 6+, 181 byte (chương trình đầy đủ)

class M{public static void main(String[]a){long n=new Long(a[0]),i=1,f;String r=n+"=";for(;i++<n;r+=f<1?"":(f<2?i:i+"^"+f)+(n>1?"*":""))for(f=0;n%i<1;n/=i)f++;System.out.print(r);}}

Hãy thử trực tuyến.

-1 byte nhờ @ceilingcat .

Giải trình:

n->{                // Method with integer parameter and String return-type
  var r=n+"=";      //  Result-String, starting at the input with an appended "="
  for(int i=1,f;i++<n;
                    //  Loop in the range [2, n]
      r+=           //    After every iteration: append the following to the result-String:
        f<1?        //     If the factor `f` is 0:
         ""         //      Append nothing
        :           //     Else:
         (f<2?      //      If the factor `f` is 1:
           i        //       Append the current prime `i`
          :         //      Else:
           i+"^"+f) //       Append the current prime `i` with it's factor `f`
         +(n>1?     //      And if we're not done yet:
            "*"     //       Also append a "*"
           :        //      Else:
            ""))    //       Append nothing more
    for(f=0;        //   Reset the factor `f` to 0
        n%i<1;      //   Loop as long as `n` is divisible by `i`
      n/=i)         //    Divide `n` by `i`
      f++;          //    Increase the factor `f` by 1
  return r;}        //  Return the result-String

@ceilingcat Cảm ơn!
Kevin Cruijssen

Không đủ điều kiện là Java 10 đã được tạo sau khi tác vụ này được xuất bản.
FUZxxl

@FUZxxl Tôi đã đánh dấu lambda Java 10 là không cạnh tranh và đã thêm một chương trình Java 6, được phát hành vào tháng 12 năm 2006 .
Kevin Cruijssen

Được, tuyệt đấy. Nó ổn với tôi!
FUZxxl

2

Japt , 28 27 26 byte

-1 byte nhờ Shaggy

+'=+Uk ü ®ÊÉ?ZÌ+'^+Zl:ZÃq*

Thử nó


Không đủ điều kiện vì ngôn ngữ của bạn đã được tạo sau khi tác vụ này được xuất bản.
FUZxxl


Nó không được phép quay lại khi thử thách được đăng. Tôi coi đó là không công bằng khi sửa đổi các quy tắc của một thách thức sau khi thử thách được đăng, vì vậy các ngôn ngữ được xuất bản sau thử thách này vẫn là bất hợp pháp.
FUZxxl

1
@FUZxxl Bạn không cần phải chấp nhận câu trả lời của tôi, nhưng tôi được phép trả lời nó bất kể thế nào.
Oliver


1

Powershell, 113 97 byte

Lấy cảm hứng từ câu trả lời của Joey . Nó chậm nhưng ngắn.

param($x)(2..$x|%{for(;!($x%$_)){$_
$x/=$_}}|group|%{$_.Name+"^"+$_.Count-replace'\^1$'})-join'*'

Kịch bản kiểm tra giải thích:

$f = {

param($x)               # let $x stores a input number > 0
(2..$x|%{               # loop from 2 to initial input number
    for(;!($x%$_)){     # loop while remainder is 0
        $_              # push a current value to a pipe
        $x/=$_          # let $x is $x/$_ (new $x uses in for condition only)
    }
}|group|%{              # group all values
    $_.Name+"^"+$_.Count-replace'\^1$'  # format and remove last ^1
})-join'*'              # make string with *

}

&$f 2
&$f 126
&$f 129
&$f 86240
#&$f 7775460

Đầu ra:

2
2*3^2*7
3*43
2^5*5*7^2*11

1

Jelly , 16 byte (không cạnh tranh theo yêu cầu của OP)

³”=³ÆFḟ€1j€”^j”*

Một trong những câu trả lời Jelly đầu tiên của tôi, vì vậy chắc chắn có thể được đánh gôn (đặc biệt ³”=³) ..

Hãy thử trực tuyến.

Giải trình:

³                 # Push the first argument
 ”=               # Push string "="
   ³ÆF            # Get the prime factor-exponent pairs of the first argument
      ḟ€1         # Remove all 1s from each pair
         j€”^     # Join each pair by "^"
             j”*  # Join the pair of strings by "*"
                  # (implicitly join the entire 'stack' together)
                  # (which is output implicitly as result)

Không đủ điều kiện vì ngôn ngữ của bạn đã được tạo sau khi tác vụ này được xuất bản.
FUZxxl

@FUZxxl Kể từ giữa năm 2017, việc không cạnh tranh sẽ không còn trong meta nữa , trừ khi thách thức nói rõ rằng các ngôn ngữ nên cũ hơn thời điểm đăng. Nhưng nếu bạn là người đăng tải thử thách chọn không cho phép các ngôn ngữ mới hơn so với thử thách sau ngày hẹn hò của bạn, tôi sẽ chỉnh sửa câu trả lời của mình để thêm phần rõ ràng (non-competing). :)
Kevin Cruijssen

Tôi tin rằng sự đồng thuận trang web đã được đặt ra khi thử thách này được đăng lên nên xác định các quy tắc cho câu trả lời. Mọi thứ khác (tức là các quy tắc thay đổi sau khi thử thách được đăng) sẽ không công bằng. Vui lòng đánh dấu câu trả lời của bạn là không cạnh tranh.
FUZxxl

@FUZxxl Tôi đã đánh dấu câu trả lời của mình là không cạnh tranh, theo yêu cầu.
Kevin Cruijssen

Cảm ơn sự giúp đỡ của bạn.
FUZxxl

1

05AB1E , 22 20 byte (không cạnh tranh theo yêu cầu của OP)

ÐfsÓ0Køε1K'^ý}'*ý'=ý

-2 byte nhờ @Emigna .

Hãy thử trực tuyến.

Giải trình:

Ð                # Triplicate the (implicit) input-integer
 f               # Pop and push all prime factors (without counting duplicates)
  s              # Swap to take the input again
   Ó             # Get all prime exponents
    0K           # Remove all 0s from the exponents list
      ø          # Zip it with the prime factors, creating pairs
       ε         # Map each pair to:
        1K       #  Remove all 1s from the pair
        '^ý     '#  And then join by "^"
       }'*ý     '# After the map: join the string/integers by "*"
           '=ý  '# And join the stack by "=" (with the input we triplicated at the start)
                 # (after which the result is output implicitly)

1Knên hoạt động thay vì `≠ iy trong vòng lặp.
Emigna

@Emigna Ah lol .. Tôi thực sự làm điều đó trong câu trả lời Jelly tôi vừa đăng . Không chắc tại sao tôi không nghĩ về nó sớm hơn ở đây. :)
Kevin Cruijssen

Không đủ điều kiện vì ngôn ngữ của bạn đã được tạo sau khi tác vụ này được xuất bản.
FUZxxl

1

APL (NARS), 66 ký tự, 132 byte

{(⍕⍵),'=',3↓∊{m←' * ',⍕↑⍵⋄1=w←2⊃⍵:m⋄m,'^',⍕w}¨v,¨+/¨{k=⍵}¨v←∪k←π⍵}

kiểm tra và nhận xét:

  f←{(⍕⍵),'=',3↓∊{m←' * ',⍕↑⍵⋄1=w←2⊃⍵:m⋄m,'^',⍕w}¨v,¨+/¨{k=⍵}¨v←∪k←π⍵}
  f 131784
131784=2^3 * 3 * 17^2 * 19
  f 2
2=2
  f (2*32)
4294967296=2^32

{(⍕⍵),'=',3↓∊{m←' * ',⍕↑⍵⋄1=w←2⊃⍵:m⋄m,'^',⍕w}¨v,¨+/¨{k=⍵}¨v←∪k←π⍵}
k←π⍵      find the factors with repetition of ⍵ and assign that array to k example for 12 k is 2 2 3
v←∪       gets from k unique elements and put them in array v
+/¨{k=⍵}¨ for each element of v count how many time it appear in k (it is array exponents)
v,¨       make array of couples from element of v (factors unique) and the array above (exponents unique)
∊{m←' * ',⍕↑⍵⋄1=w←2⊃⍵:m⋄m,'^',⍕w}¨ pretty print the array of couples factor exponent as array chars
3↓                                 but not the first 3 chars
(⍕⍵),'='  but print first the argument and '=' in char format

Nếu ai đó có nhiều thời gian với những người nguyên thủy này, hãy biết rõ về họ, đối với tôi có thể là mã rõ ràng hơn về các bình luận ... vì vậy mã rõ ràng hơn bình luận, bình luận không đáng tin ...


0

JavaScript, 107

n=prompt()
s=n+'='
c=0
for(i=2;;){if(n%i<1){c++
n/=i}else{if(c)s+=i+'^'+c+'*'
c=0
if(++i>n)break}}
alert(s)

120

n=prompt()
o={2:0}
for(i=2,c=n;i<=c;)!(c%i)?++o[i]?c/=i:0:o[++i]=0
s=n+'='
for(i in o)s+=o[i]?i+'^'+o[i]+'*':''
alert(s)

1
Có dấu *ở đầu ra và in số mũ ngay cả khi đó là 1.
Ventero

không cần downvote. Không có nơi nào nói rằng nó không thể in số mũ nếu là 1. Ngoài ra, dấu vết *giả định nhân với 1. Nếu đó là một vấn đề lớn, tôi sẽ sửa nó.
zzzzBov

1
»Trong định dạng sau« trong phần mô tả tác vụ khá nhiều ngụ ý rằng 1không nên in số mũ . Và không, một dấu vết *cũng chống lại điều đó. Nếu người ta có thể chọn định dạng đầu ra một cách tự do, thì tách ra factor(1)sẽ là định dạng dễ nhất. Câu trả lời chỉ có thể so sánh hợp lý nếu tất cả chúng đều giải quyết cùng một vấn đề.
Joey

3
Là người tạo ra nhiệm vụ này, tôi nói, các số mũ phải được bỏ qua nếu 1 và chỉ các số nguyên tố có thể là các yếu tố.
FUZxxl


0

PHP, 93 byte

<?=$n=$argn;for($i=2;$n>1;$k&&$p=print($p?"*":"=")."$i^$k",$i++)for($k=0;$n%$i<1;$n/=$i)$k++;

Tôi có thể thực hiện 89 byte với PHP 5.5 (hoặc mới hơn), nhưng điều đó hoãn lại thử thách hơn 2 năm:

<?=$n=$argn;for($i=2;$n>1;$k&&$p=print"=*"[$p]."$i^$k",$i++)for($k=0;$n%$i<1;$n/=$i)$k++;

Chạy như ống với -nFhoặc thử chúng trực tuyến .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.