Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
81
Task/Smith-numbers/PureBasic/smith-numbers.basic
Normal file
81
Task/Smith-numbers/PureBasic/smith-numbers.basic
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
DisableDebugger
|
||||
#ECHO=#True ; #True: Print all results
|
||||
Global NewList f.i()
|
||||
|
||||
Procedure.i ePotenz(Wert.i)
|
||||
Define.i var=Wert, i
|
||||
While var
|
||||
i+1
|
||||
var/10
|
||||
Wend
|
||||
ProcedureReturn i
|
||||
EndProcedure
|
||||
|
||||
Procedure.i n_Element(Wert.i,Stelle.i=1)
|
||||
If Stelle>0
|
||||
ProcedureReturn (Wert%Int(Pow(10,Stelle))-Wert%Int(Pow(10,Stelle-1)))/Int(Pow(10,Stelle-1))
|
||||
Else
|
||||
ProcedureReturn 0
|
||||
EndIf
|
||||
EndProcedure
|
||||
|
||||
Procedure.i qSumma(Wert.i)
|
||||
Define.i sum, pos
|
||||
For pos=1 To ePotenz(Wert)
|
||||
sum+ n_Element(Wert,pos)
|
||||
Next pos
|
||||
ProcedureReturn sum
|
||||
EndProcedure
|
||||
|
||||
Procedure.b IsPrime(n.i)
|
||||
Define.i i=5
|
||||
If n<2 : ProcedureReturn #False : EndIf
|
||||
If n%2=0 : ProcedureReturn Bool(n=2) : EndIf
|
||||
If n%3=0 : ProcedureReturn Bool(n=3) : EndIf
|
||||
While i*i<=n
|
||||
If n%i=0 : ProcedureReturn #False : EndIf
|
||||
i+2
|
||||
If n%i=0 : ProcedureReturn #False : EndIf
|
||||
i+4
|
||||
Wend
|
||||
ProcedureReturn #True
|
||||
EndProcedure
|
||||
|
||||
Procedure PFZ(n.i,pf.i=2)
|
||||
If n>1 And n<>pf
|
||||
If n%pf=0
|
||||
AddElement(f()) : f()=pf
|
||||
PFZ(n/pf,pf)
|
||||
Else
|
||||
While Not IsPrime(pf+1) : pf+1 : Wend
|
||||
PFZ(n,pf+1)
|
||||
EndIf
|
||||
ElseIf n=pf
|
||||
AddElement(f()) : f()=pf
|
||||
EndIf
|
||||
EndProcedure
|
||||
|
||||
OpenConsole("Smith numbers")
|
||||
;upto=100 : sn=0 : Gosub Smith_loop
|
||||
;upto=1000 : sn=0 : Gosub Smith_loop
|
||||
upto=10000 : sn=0 : Gosub Smith_loop
|
||||
Input()
|
||||
End
|
||||
|
||||
Smith_loop:
|
||||
For i=2 To upto
|
||||
ClearList(f()) : qs=0
|
||||
PFZ(i)
|
||||
CompilerIf #ECHO : Print(Str(i)+~": \t") : CompilerEndIf
|
||||
ForEach f()
|
||||
CompilerIf #ECHO : Print(Str(F())+~"\t") : CompilerEndIf
|
||||
qs+qSumma(f())
|
||||
Next
|
||||
If ListSize(f())>1 And qSumma(i)=qs
|
||||
CompilerIf #ECHO : Print("SMITH-NUMBER") : CompilerEndIf
|
||||
sn+1
|
||||
EndIf
|
||||
CompilerIf #ECHO : PrintN("") : CompilerEndIf
|
||||
Next
|
||||
Print(~"\n"+Str(sn)+" Smith number up to "+Str(upto))
|
||||
Return
|
||||
Loading…
Add table
Add a link
Reference in a new issue