Numbers factorization
up vote
1
down vote
favorite
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
up vote
1
down vote
favorite
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))
– Daniil
Nov 10 at 20:46
What is your question?
– roganjosh
Nov 10 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 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
– Daniil
Nov 10 at 20:59
Please provide an example of your code's output for a given input.
– roeen30
Nov 10 at 21:27
|
show 1 more comment
up vote
1
down vote
favorite
up vote
1
down vote
favorite
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 at 20:46
Daniil
62
62
is_prime is function: def is_prime(n): return n > 1 and all(n % i != 0 for i in range(2, n))
– Daniil
Nov 10 at 20:46
What is your question?
– roganjosh
Nov 10 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 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
– Daniil
Nov 10 at 20:59
Please provide an example of your code's output for a given input.
– roeen30
Nov 10 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))
– Daniil
Nov 10 at 20:46
What is your question?
– roganjosh
Nov 10 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 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
– Daniil
Nov 10 at 20:59
Please provide an example of your code's output for a given input.
– roeen30
Nov 10 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))
– Daniil
Nov 10 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))
– Daniil
Nov 10 at 20:46
What is your question?
– roganjosh
Nov 10 at 20:52
What is your question?
– roganjosh
Nov 10 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 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 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
– Daniil
Nov 10 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
– Daniil
Nov 10 at 20:59
Please provide an example of your code's output for a given input.
– roeen30
Nov 10 at 21:27
Please provide an example of your code's output for a given input.
– roeen30
Nov 10 at 21:27
|
show 1 more comment
2 Answers
2
active
oldest
votes
up vote
0
down vote
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 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 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 at 21:05
add a comment |
up vote
0
down vote
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
New contributor
add a comment |
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
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 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 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 at 21:05
add a comment |
up vote
0
down vote
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 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 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 at 21:05
add a comment |
up vote
0
down vote
up vote
0
down vote
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 at 21:09
answered Nov 10 at 20:52
quant
1,43411226
1,43411226
1
What does this have to do with the question at all?
– roganjosh
Nov 10 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 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 at 21:05
add a comment |
1
What does this have to do with the question at all?
– roganjosh
Nov 10 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 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 at 21:05
1
1
What does this have to do with the question at all?
– roganjosh
Nov 10 at 20:54
What does this have to do with the question at all?
– roganjosh
Nov 10 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 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 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 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 at 21:05
add a comment |
up vote
0
down vote
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
New contributor
add a comment |
up vote
0
down vote
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
New contributor
add a comment |
up vote
0
down vote
up vote
0
down vote
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
New contributor
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
New contributor
New contributor
answered Nov 11 at 17:31
Daniil
62
62
New contributor
New contributor
add a comment |
add a comment |
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))
– Daniil
Nov 10 at 20:46
What is your question?
– roganjosh
Nov 10 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 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
– Daniil
Nov 10 at 20:59
Please provide an example of your code's output for a given input.
– roeen30
Nov 10 at 21:27