• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Wyciąganie liczby poza pierwiastek. Rozkład na czynniki.

Object Storage Arubacloud
0 głosów
245 wizyt
pytanie zadane 18 stycznia 2023 w C i C++ przez piotr_domanski Bywalec (2,080 p.)
zamknięte 19 stycznia 2023 przez piotr_domanski

Witam,

Na sam początek opiszę co chce zrobić i co d tej pory zrobiłem. Chce napisać taki algorytm, który np. z liczby sqrt(18), zrobi liczbę 3sqrt(2), wynika to z rozkładu:

Zrobiłem mapowanie tych czynników, tylko, że mój program robi coś takiego:

#include <iostream>
#include <vector>
#include <map>

using namespace std;
using vi=std::vector<int>;
using mii=std::map<int,int>;

int lastprime(vi & primes){
   // bool isprimre=true;
    auto it=primes.begin();
    auto end=primes.end();
    int i=primes.back()+1;
    for (;it!=end;i++)
    for(it=primes.begin();it!=end;it++){
        if(i%(*it)==0) {
            break;}
    }i--;
    primes.push_back(i);
    return i;
}

int main()
{
    vi v{2};
    mii m {};
    int num=15593760;
    while (num!=1 ){
        int currentnum=v.back();
    while (num%currentnum==0){
        m[currentnum]++;
        num/=currentnum;
    } 
        lastprime(v);
    }
     for(const auto &x:m) std::cout << x.first<< " wystepuje "<<x.second<<" razy"<<std::endl;
     std::cout<< std::endl; 
    while (lastprime(v)<10);
   // for(const auto &x:v) std::cout << x<<' ';
    std::cout<< std::endl;
    return 0;
}

W skrócie wypisuje ilość czynników po rozkładzie.

Dla liczby 32, nie ma problemów, gdyż przy rozkładzie będą same dwójki. Ale przy 18 mamy różne liczby pierwsze 3 i 2. Jak zrobić operację na tych liczbach, żeby wyciągnąć tą liczbę poza pierwiastek. Może szukać tych samych liczb i potęgować je (wykładnik potęgi będzie równy ilości tych samych liczb). 

Czy ktoś wie jak to zrobić? Ja już nie mam pomysłów :(.

 

Z góry bardzo dziękuje. 

komentarz zamknięcia: rozwiązanie
komentarz 18 stycznia 2023 przez Whiskey_Taster Pasjonat (15,610 p.)

Mając rozkład masz już wszystko. Pierwiastkowanie to nic innego jak potęgowanie liczby przez pewną odwrotność, w ogólności pierwiastek n-tego stopnia z liczby m można zapisać jako m^{1/n}. 

Bazując na tym co napisałem, wystarczy sprawdzać, czy wykładnik jest większy niż stopień pierwiastka. Jeśli jest, to wystarczy użyć chociażby operacji modulo. A jak nie jest, to nie ma nawet co robić. 

komentarz 18 stycznia 2023 przez piotr_domanski Bywalec (2,080 p.)
Czyli mam zrobić pętle czy jak, dla liczby 18

18/2 = 9

9/3 = 3

3/3 = 1

czyli mamy czynniki: 2,3,3.

I teraz co mam zrobić?
komentarz 18 stycznia 2023 przez Whiskey_Taster Pasjonat (15,610 p.)
No nie, co innego napisałem. Masz już gotowy rozkład, więc dla każdej z podstaw (liczby 2 oraz 3) przechodzisz po ich wykładnikach (liczby 1 oraz 2). To jest prosty algorytm, którego w zasadzie używasz, jak wyciągasz liczbę spod pierwiastka.
komentarz 18 stycznia 2023 przez piotr_domanski Bywalec (2,080 p.)
już trochę rozumiem, spróbuje napisać w c++ :)
komentarz 18 stycznia 2023 przez piotr_domanski Bywalec (2,080 p.)
Ciężko mi to napisać, czy możesz mi pokazać to na przykładzie ?
komentarz 19 stycznia 2023 przez TOWaD Mądrala (5,700 p.)

->tu

Sorki admins, też cieszę się jak dostaję gotowca [w prostych rzeczach]. Jak coś potrafię to wolę sam.

komentarz 19 stycznia 2023 przez piotr_domanski Bywalec (2,080 p.)
dzięki, sorki, ale próbowałem napisać ale wychodziły głupoty :(.

Podobne pytania

0 głosów
1 odpowiedź 321 wizyt
pytanie zadane 16 stycznia 2023 w C i C++ przez piotr_domanski Bywalec (2,080 p.)
0 głosów
1 odpowiedź 389 wizyt
pytanie zadane 9 października 2022 w Python przez techno16 Gaduła (4,780 p.)
0 głosów
1 odpowiedź 233 wizyt

92,555 zapytań

141,404 odpowiedzi

319,560 komentarzy

61,941 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...