Numbers factorization
The task is to write function that foldes number into prime factors. By given number 'n' this function should return a list of tuples p_i,c^i, for example if input is 100, the output is (2,2),(5,2).
So, here is how i try to write it:
def factor(n):
c = 1
pre_ans = list()
temp_n=n
for i in range(2,temp_n+1):
if (is_prime(i) == True) and (temp_n % i == 0):
for j in range (2,temp_n+1):
if (temp_n % (i ** j) == 0):
pre_ans.append((i,j))
temp_n /= (i **j)
pre_ans.append((i,c))
temp_n /= i
print(pre_ans)
It works wrong but I can't find a mistake :(
python python-3.x primes factorization
|
show 1 more comment
The task is to write function that foldes number into prime factors. By given number 'n' this function should return a list of tuples p_i,c^i, for example if input is 100, the output is (2,2),(5,2).
So, here is how i try to write it:
def factor(n):
c = 1
pre_ans = list()
temp_n=n
for i in range(2,temp_n+1):
if (is_prime(i) == True) and (temp_n % i == 0):
for j in range (2,temp_n+1):
if (temp_n % (i ** j) == 0):
pre_ans.append((i,j))
temp_n /= (i **j)
pre_ans.append((i,c))
temp_n /= i
print(pre_ans)
It works wrong but I can't find a mistake :(
python python-3.x primes factorization
is_prime is function: def is_prime(n): return n > 1 and all(n % i != 0 for i in range(2, n))
– nutcracker
Nov 10 '18 at 20:46
What is your question?
– roganjosh
Nov 10 '18 at 20:52
Also, why haven't you includedis_prime
as a properly edited function in your question? Please edit it in.
– roganjosh
Nov 10 '18 at 20:53
my question is that why this exact code does not work right, though i find it ideologically correct. If i'm doing smth wrong, then please correct me
– nutcracker
Nov 10 '18 at 20:59
Please provide an example of your code's output for a given input.
– roeen30
Nov 10 '18 at 21:27
|
show 1 more comment
The task is to write function that foldes number into prime factors. By given number 'n' this function should return a list of tuples p_i,c^i, for example if input is 100, the output is (2,2),(5,2).
So, here is how i try to write it:
def factor(n):
c = 1
pre_ans = list()
temp_n=n
for i in range(2,temp_n+1):
if (is_prime(i) == True) and (temp_n % i == 0):
for j in range (2,temp_n+1):
if (temp_n % (i ** j) == 0):
pre_ans.append((i,j))
temp_n /= (i **j)
pre_ans.append((i,c))
temp_n /= i
print(pre_ans)
It works wrong but I can't find a mistake :(
python python-3.x primes factorization
The task is to write function that foldes number into prime factors. By given number 'n' this function should return a list of tuples p_i,c^i, for example if input is 100, the output is (2,2),(5,2).
So, here is how i try to write it:
def factor(n):
c = 1
pre_ans = list()
temp_n=n
for i in range(2,temp_n+1):
if (is_prime(i) == True) and (temp_n % i == 0):
for j in range (2,temp_n+1):
if (temp_n % (i ** j) == 0):
pre_ans.append((i,j))
temp_n /= (i **j)
pre_ans.append((i,c))
temp_n /= i
print(pre_ans)
It works wrong but I can't find a mistake :(
python python-3.x primes factorization
python python-3.x primes factorization
asked Nov 10 '18 at 20:46
nutcrackernutcracker
133
133
is_prime is function: def is_prime(n): return n > 1 and all(n % i != 0 for i in range(2, n))
– nutcracker
Nov 10 '18 at 20:46
What is your question?
– roganjosh
Nov 10 '18 at 20:52
Also, why haven't you includedis_prime
as a properly edited function in your question? Please edit it in.
– roganjosh
Nov 10 '18 at 20:53
my question is that why this exact code does not work right, though i find it ideologically correct. If i'm doing smth wrong, then please correct me
– nutcracker
Nov 10 '18 at 20:59
Please provide an example of your code's output for a given input.
– roeen30
Nov 10 '18 at 21:27
|
show 1 more comment
is_prime is function: def is_prime(n): return n > 1 and all(n % i != 0 for i in range(2, n))
– nutcracker
Nov 10 '18 at 20:46
What is your question?
– roganjosh
Nov 10 '18 at 20:52
Also, why haven't you includedis_prime
as a properly edited function in your question? Please edit it in.
– roganjosh
Nov 10 '18 at 20:53
my question is that why this exact code does not work right, though i find it ideologically correct. If i'm doing smth wrong, then please correct me
– nutcracker
Nov 10 '18 at 20:59
Please provide an example of your code's output for a given input.
– roeen30
Nov 10 '18 at 21:27
is_prime is function: def is_prime(n): return n > 1 and all(n % i != 0 for i in range(2, n))
– nutcracker
Nov 10 '18 at 20:46
is_prime is function: def is_prime(n): return n > 1 and all(n % i != 0 for i in range(2, n))
– nutcracker
Nov 10 '18 at 20:46
What is your question?
– roganjosh
Nov 10 '18 at 20:52
What is your question?
– roganjosh
Nov 10 '18 at 20:52
Also, why haven't you included
is_prime
as a properly edited function in your question? Please edit it in.– roganjosh
Nov 10 '18 at 20:53
Also, why haven't you included
is_prime
as a properly edited function in your question? Please edit it in.– roganjosh
Nov 10 '18 at 20:53
my question is that why this exact code does not work right, though i find it ideologically correct. If i'm doing smth wrong, then please correct me
– nutcracker
Nov 10 '18 at 20:59
my question is that why this exact code does not work right, though i find it ideologically correct. If i'm doing smth wrong, then please correct me
– nutcracker
Nov 10 '18 at 20:59
Please provide an example of your code's output for a given input.
– roeen30
Nov 10 '18 at 21:27
Please provide an example of your code's output for a given input.
– roeen30
Nov 10 '18 at 21:27
|
show 1 more comment
2 Answers
2
active
oldest
votes
Your general idea is ok. However there are some minor issues with the following part of your code:
for j in range (2,temp_n+1):
if (temp_n % (i ** j) == 0):
pre_ans.append((i,j))
temp_n /= (i **j)
pre_ans.append((i,c))
temp_n /= i
In fact the main problem is that you need to iterate in the other direction in this statement for j in range (2,temp_n+1)
. If you rewrite it like
def factor(n):
c = 1
pre_ans = list()
temp_n=n
for i in range(2,temp_n+1):
if (is_prime(i) == True) and (temp_n % i == 0):
for j in range (temp_n+1, 0,-1):
if (temp_n % (i ** j) == 0):
pre_ans.append((i,j))
temp_n /= (i **j)
print(pre_ans)
it will work. The whole code can also get written a bit shorter:
from collections import Counter
def factor(n):
lst =
for i in range(2, n+1):
while n % i == 0:
lst.append(i)
n = n / i
return Counter(lst).items()
print(factor(100))
1
What does this have to do with the question at all?
– roganjosh
Nov 10 '18 at 20:54
It's not a short solution. Where are you processing a list of tuples and where are you giving out prime factors? It's almost like you've just dumped code from another question.
– roganjosh
Nov 10 '18 at 20:59
@roganjosh A list of tupels is returned by the Counter function. Don't need to do this by myself.
– quant
Nov 10 '18 at 21:05
add a comment |
Fixed the code. This is working version
def factor(n):
c = 1
pre_ans = list()
temp_n=n
for i in range(2, n // 2 + 1):
if (is_prime(i) == True):
k = 1
while temp_n % (i ** k) == 0:
if temp_n % (i ** (k + 1)) == 0:
k += 1
else:
k += 1
break
if k > 1:
pre_ans.append((i, k - 1))
return pre_ans
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53243241%2fnumbers-factorization%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
Your general idea is ok. However there are some minor issues with the following part of your code:
for j in range (2,temp_n+1):
if (temp_n % (i ** j) == 0):
pre_ans.append((i,j))
temp_n /= (i **j)
pre_ans.append((i,c))
temp_n /= i
In fact the main problem is that you need to iterate in the other direction in this statement for j in range (2,temp_n+1)
. If you rewrite it like
def factor(n):
c = 1
pre_ans = list()
temp_n=n
for i in range(2,temp_n+1):
if (is_prime(i) == True) and (temp_n % i == 0):
for j in range (temp_n+1, 0,-1):
if (temp_n % (i ** j) == 0):
pre_ans.append((i,j))
temp_n /= (i **j)
print(pre_ans)
it will work. The whole code can also get written a bit shorter:
from collections import Counter
def factor(n):
lst =
for i in range(2, n+1):
while n % i == 0:
lst.append(i)
n = n / i
return Counter(lst).items()
print(factor(100))
1
What does this have to do with the question at all?
– roganjosh
Nov 10 '18 at 20:54
It's not a short solution. Where are you processing a list of tuples and where are you giving out prime factors? It's almost like you've just dumped code from another question.
– roganjosh
Nov 10 '18 at 20:59
@roganjosh A list of tupels is returned by the Counter function. Don't need to do this by myself.
– quant
Nov 10 '18 at 21:05
add a comment |
Your general idea is ok. However there are some minor issues with the following part of your code:
for j in range (2,temp_n+1):
if (temp_n % (i ** j) == 0):
pre_ans.append((i,j))
temp_n /= (i **j)
pre_ans.append((i,c))
temp_n /= i
In fact the main problem is that you need to iterate in the other direction in this statement for j in range (2,temp_n+1)
. If you rewrite it like
def factor(n):
c = 1
pre_ans = list()
temp_n=n
for i in range(2,temp_n+1):
if (is_prime(i) == True) and (temp_n % i == 0):
for j in range (temp_n+1, 0,-1):
if (temp_n % (i ** j) == 0):
pre_ans.append((i,j))
temp_n /= (i **j)
print(pre_ans)
it will work. The whole code can also get written a bit shorter:
from collections import Counter
def factor(n):
lst =
for i in range(2, n+1):
while n % i == 0:
lst.append(i)
n = n / i
return Counter(lst).items()
print(factor(100))
1
What does this have to do with the question at all?
– roganjosh
Nov 10 '18 at 20:54
It's not a short solution. Where are you processing a list of tuples and where are you giving out prime factors? It's almost like you've just dumped code from another question.
– roganjosh
Nov 10 '18 at 20:59
@roganjosh A list of tupels is returned by the Counter function. Don't need to do this by myself.
– quant
Nov 10 '18 at 21:05
add a comment |
Your general idea is ok. However there are some minor issues with the following part of your code:
for j in range (2,temp_n+1):
if (temp_n % (i ** j) == 0):
pre_ans.append((i,j))
temp_n /= (i **j)
pre_ans.append((i,c))
temp_n /= i
In fact the main problem is that you need to iterate in the other direction in this statement for j in range (2,temp_n+1)
. If you rewrite it like
def factor(n):
c = 1
pre_ans = list()
temp_n=n
for i in range(2,temp_n+1):
if (is_prime(i) == True) and (temp_n % i == 0):
for j in range (temp_n+1, 0,-1):
if (temp_n % (i ** j) == 0):
pre_ans.append((i,j))
temp_n /= (i **j)
print(pre_ans)
it will work. The whole code can also get written a bit shorter:
from collections import Counter
def factor(n):
lst =
for i in range(2, n+1):
while n % i == 0:
lst.append(i)
n = n / i
return Counter(lst).items()
print(factor(100))
Your general idea is ok. However there are some minor issues with the following part of your code:
for j in range (2,temp_n+1):
if (temp_n % (i ** j) == 0):
pre_ans.append((i,j))
temp_n /= (i **j)
pre_ans.append((i,c))
temp_n /= i
In fact the main problem is that you need to iterate in the other direction in this statement for j in range (2,temp_n+1)
. If you rewrite it like
def factor(n):
c = 1
pre_ans = list()
temp_n=n
for i in range(2,temp_n+1):
if (is_prime(i) == True) and (temp_n % i == 0):
for j in range (temp_n+1, 0,-1):
if (temp_n % (i ** j) == 0):
pre_ans.append((i,j))
temp_n /= (i **j)
print(pre_ans)
it will work. The whole code can also get written a bit shorter:
from collections import Counter
def factor(n):
lst =
for i in range(2, n+1):
while n % i == 0:
lst.append(i)
n = n / i
return Counter(lst).items()
print(factor(100))
edited Nov 10 '18 at 21:09
answered Nov 10 '18 at 20:52
quantquant
1,58211526
1,58211526
1
What does this have to do with the question at all?
– roganjosh
Nov 10 '18 at 20:54
It's not a short solution. Where are you processing a list of tuples and where are you giving out prime factors? It's almost like you've just dumped code from another question.
– roganjosh
Nov 10 '18 at 20:59
@roganjosh A list of tupels is returned by the Counter function. Don't need to do this by myself.
– quant
Nov 10 '18 at 21:05
add a comment |
1
What does this have to do with the question at all?
– roganjosh
Nov 10 '18 at 20:54
It's not a short solution. Where are you processing a list of tuples and where are you giving out prime factors? It's almost like you've just dumped code from another question.
– roganjosh
Nov 10 '18 at 20:59
@roganjosh A list of tupels is returned by the Counter function. Don't need to do this by myself.
– quant
Nov 10 '18 at 21:05
1
1
What does this have to do with the question at all?
– roganjosh
Nov 10 '18 at 20:54
What does this have to do with the question at all?
– roganjosh
Nov 10 '18 at 20:54
It's not a short solution. Where are you processing a list of tuples and where are you giving out prime factors? It's almost like you've just dumped code from another question.
– roganjosh
Nov 10 '18 at 20:59
It's not a short solution. Where are you processing a list of tuples and where are you giving out prime factors? It's almost like you've just dumped code from another question.
– roganjosh
Nov 10 '18 at 20:59
@roganjosh A list of tupels is returned by the Counter function. Don't need to do this by myself.
– quant
Nov 10 '18 at 21:05
@roganjosh A list of tupels is returned by the Counter function. Don't need to do this by myself.
– quant
Nov 10 '18 at 21:05
add a comment |
Fixed the code. This is working version
def factor(n):
c = 1
pre_ans = list()
temp_n=n
for i in range(2, n // 2 + 1):
if (is_prime(i) == True):
k = 1
while temp_n % (i ** k) == 0:
if temp_n % (i ** (k + 1)) == 0:
k += 1
else:
k += 1
break
if k > 1:
pre_ans.append((i, k - 1))
return pre_ans
add a comment |
Fixed the code. This is working version
def factor(n):
c = 1
pre_ans = list()
temp_n=n
for i in range(2, n // 2 + 1):
if (is_prime(i) == True):
k = 1
while temp_n % (i ** k) == 0:
if temp_n % (i ** (k + 1)) == 0:
k += 1
else:
k += 1
break
if k > 1:
pre_ans.append((i, k - 1))
return pre_ans
add a comment |
Fixed the code. This is working version
def factor(n):
c = 1
pre_ans = list()
temp_n=n
for i in range(2, n // 2 + 1):
if (is_prime(i) == True):
k = 1
while temp_n % (i ** k) == 0:
if temp_n % (i ** (k + 1)) == 0:
k += 1
else:
k += 1
break
if k > 1:
pre_ans.append((i, k - 1))
return pre_ans
Fixed the code. This is working version
def factor(n):
c = 1
pre_ans = list()
temp_n=n
for i in range(2, n // 2 + 1):
if (is_prime(i) == True):
k = 1
while temp_n % (i ** k) == 0:
if temp_n % (i ** (k + 1)) == 0:
k += 1
else:
k += 1
break
if k > 1:
pre_ans.append((i, k - 1))
return pre_ans
answered Nov 11 '18 at 17:31
nutcrackernutcracker
133
133
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53243241%2fnumbers-factorization%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
is_prime is function: def is_prime(n): return n > 1 and all(n % i != 0 for i in range(2, n))
– nutcracker
Nov 10 '18 at 20:46
What is your question?
– roganjosh
Nov 10 '18 at 20:52
Also, why haven't you included
is_prime
as a properly edited function in your question? Please edit it in.– roganjosh
Nov 10 '18 at 20:53
my question is that why this exact code does not work right, though i find it ideologically correct. If i'm doing smth wrong, then please correct me
– nutcracker
Nov 10 '18 at 20:59
Please provide an example of your code's output for a given input.
– roeen30
Nov 10 '18 at 21:27