Why does setting the condition to x*x < n not work in finding prime factors?

In summary, the conversation discusses a solution to a project Euler problem involving finding the largest prime factor of a given number. The method used is trial division, but there is a discrepancy in the code when trying to optimize by only checking for factors up to the square root of n. It is discovered that the original code works because the value of n is updated inside the for loop, causing the check for x < n to be the correct one to use.
  • #1
CrazyNeutrino
100
0
I've just started with project Euler. The problem I just finished is phrased as follows:

"The prime factors of 13195 are 5, 7, 13 and 29.

What is the largest prime factor of the number 600851475143 ?"

The method i used was trial division. Here is my code in C:
C:
#include<stdio.h>
int main()
{
     long long n = 600851475143;
     long long x;
     long long factor;

     for(x=2; x<n; x++)
     {
          while( n % x == 0 )
          {
                n =  n / x; 
                factor = x;
           }
     }

     printf("\n%lld\n", x);
     return 0;
}

Although this did solve the problem, (answer is 6572) I have read that you only need to check for factors upto the square root of n. I tried doing this by setting the condition x*x<n instead of x<n. This however, does not work and prints a value of 1472. Can someone explain why?
 
Last edited by a moderator:
Technology news on Phys.org
  • #2
Your code is wrong. Neither 6572 nor 1472 are factors of 600851475143. Notice that the variable factor is never used. I suggest getting it working on smaller numbers first. Also, think about what happens if you find a factor x, and this leads to a new value of n=n/x which is smaller than x.
 
Last edited:
  • #3
My apologies, i meant 6857. My program generated the correct answer. Admittedly I'm not too sure why and i don't know why it doesn't work when i try x*x<n. Also, i meant to print factor, not x.
 
  • #4
CrazyNeutrino said:
My apologies, i meant 6857. My program generated the correct answer. Admittedly I'm not too sure why and i don't know why it doesn't work when i try x*x<n. Also, i meant to print factor, not x.

Does your original code (with x<n) work when you print factor?

Let me ask another question. Do you realize that when you update the value of n inside the for loop, that this impacts the test (x<n or x*x<n) which is done to decide when to exit the loop?
 
Last edited:
  • #5
CrazyNeutrino said:
Although this did solve the problem, (answer is 6572) I have read that you only need to check for factors up to the square root of n. I tried doing this by setting the condition x*x<n instead of x<n. This however, does not work and prints a value of 1472. Can someone explain why?
600851475143 = 71×839×1471×6857.

During the loop the values for n are:

600851475143/17 = 8462696833
8462696833/839 = 10086647
10086647/1471 = 6857
6857/6857 = 1

So the check for x < n is the correct check to use in this case. If n wasn't being divided each time a factor was found, then the check for x*x < n would work.
 
  • Like
Likes CrazyNeutrino

FAQ: Why does setting the condition to x*x < n not work in finding prime factors?

1. What is "Project Euler solution 3"?

"Project Euler solution 3" refers to the third problem in the Project Euler series, a collection of mathematical and computational challenges designed to be solved using programming and problem-solving skills.

2. What is the goal of Project Euler solution 3?

The goal of Project Euler solution 3 is to find the largest prime factor of a given number. This challenges both mathematical and computational thinking, as well as programming skills.

3. How can I approach solving Project Euler solution 3?

One approach to solving Project Euler solution 3 is to first understand the concept of prime numbers and prime factorization. Then, using programming languages and algorithms, one can find the largest prime factor of a given number.

4. Is there only one solution to Project Euler solution 3?

No, there are multiple ways to solve Project Euler solution 3. Each solution may vary in terms of efficiency and complexity, depending on the programming language and algorithm used.

5. Are there any resources available to help with solving Project Euler solution 3?

Yes, there are various online resources and forums where people discuss and share their approaches and solutions to Project Euler problems. Additionally, there are many tutorials and programming exercises that can help build the necessary skills to solve such problems.

Similar threads

Replies
14
Views
4K
Replies
39
Views
3K
Replies
17
Views
5K
6
Replies
175
Views
22K
Back
Top