Author Topic: Begginer problem  (Read 2230 times)

Blo

  • Guest
Begginer problem
« on: December 19, 2022, 09:32:11 am »
I have a questions regarding this problem:
Write a program that loads the natural number n. It should be checked whether the number x = k*k - 79k + 1601 , k ≥ 0, prime or not, for all natural numbers k ≤ n. The program should print the numbers k and x (for its k), the answer to the question and, if the number x (for its k) is not prime, print its smallest prime factor.

Everything is good until I check for number 80+. For some reason is stops at 79. Is there any reason why? I would appreciate the answer. And if you want, give me some suggestions to improve this program (I just started learning C program).
I am only using stdio.h file. Want to learn as much as I can with this one and then move on to more.


#include <stdio.h>
int main(void){

    int n, x, k = 1, prime = 0;
    int i, j, min_prime_fact;

    printf("n: ");
    scanf("%d", &n);

    for(x = k * k - 79 * k + 1601; k <= n; ++k){
         x = k * k - 79 * k + 1601;
         for(i = 2; i <= x / 2; ++i){
            if(x % i == 0){
                prime = 1;
            }
         }
         if(prime == 0){
            printf("For %d number %d is prime.\n", k, x);
         } else {
                do {
                    min_prime_fact = x / 2;
                    for(j = 2; j <= x / 2; ++j){
                        if(x % j == 0){
                            if(j < min_prime_fact){
                                min_prime_fact = j;
                            }
                            x = x / j;
                        }
                    }
                } while(x > 1);
                printf("For %d number %d is not prime. %d is its smallest prime factor.\n", k, x, min_prime_fact);
        }
    }

    return 0;
}
« Last Edit: December 19, 2022, 09:39:32 am by Blo »

Offline Miguel Gimenez

  • Developer
  • Lives here!
  • *****
  • Posts: 1575
Re: Begginer problem
« Reply #1 on: December 19, 2022, 12:09:33 pm »
General programming is off-topic here.

Offline jordi

  • Multiple posting newcomer
  • *
  • Posts: 22
Re: Begginer problem
« Reply #2 on: December 19, 2022, 10:00:41 pm »
Code
#include <stdio.h>
#include <stdbool.h>

bool isPrime(int x)
{
    bool prime = true;
    for (int i = 2; i <= x/2; ++i)
    {
        if (x % i == 0)
        {
            prime = false;
            break;
        }
    }
    return prime;
}

int main(void){

    int n;
    printf("n: ");
    scanf("%d", &n);

    for(int k = 1; k <= n; ++k){
        int x = k * k - 79 * k + 1601;
        if(isPrime(x)){
            printf("For %d number %d is prime.\n", k, x);
        } else {
            int min_prime_fact = 0;
            for(int j = 2; j <= x / 2; ++j){
                if(x % j == 0){ /* check j for factor of x */
                    if(isPrime(j)){
                        min_prime_fact = j;
                        break;
                    }
                }
            }
            printf("For %d number %d is not prime. %d is its smallest prime factor.\n", k, x, min_prime_fact);
        }
    }

    return 0;
}