Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C++] Conteggio Divisori

    Ho realizzato un programma per calcolare tutti i divisori di un numero solo che con gli n che sono circa 10^12 non funziona(va troppo lento).

    Testo del problema
    codice:
    Descrizione del problema
    Sia x un numero intero. Diremo che y è un divisore di x se 1 <= y <= x e il resto della divisione di x per y è
    uguale a zero.
    Si chiede di contare tutti i possibili divisori di un dato numero x.
    Dati di input
    Il file di input contiene un intero x (1 <= x <= 10^18). Tutti i divisori primi di x non superano 1000.
    Dati di output
    Deve contenere il risultato richiesto dal problema
    Mia soluzione inefficiente
    codice:
    #include <iostream>
    #include <fstream>
    #include <vector>
    	using namespace std;
    	inline int operator % (vector<int>v, unsigned long long k) {
    		unsigned long temp = 0;
    		while (v.size() != 0) {
    			while (temp < k && v.size() != 0) {
    				temp = temp * 10 + v[0];
    				v.erase(v.begin());
    			}
    			temp = temp % k;
    		}
    		return temp;
    	}
    
    	int main() {
    		ifstream in;
    		ofstream out;
    		vector<int>v1;
    		register unsigned divisore;
    		in.open("input.txt");
    		if (in.is_open()) {
    			int temp = in.get();
    			while (temp >= '0' && temp <= '9') {
    				v1.push_back(temp - '0');
    				temp = in.get();
    			}
    			int cont = 0;
    			int primi = 0;
    			for (divisore = 1; divisore <= 100000; divisore++) {
    				if (v1 % divisore == 0)
    					cont++;
    			}
    			out.open("output.txt");
    			out << cont;
    			out.close();
    			in.close();
    		}
    		return 0;
    	}
    }
    Praticamente il problema è che non sò fino a quale numero k devo controllare che k sia divisore di x. Nel problema mi dice che tutti i divisori primi di x non superano 1000, ma non ho capito cosa vuol dire

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    153
    è normale che più vai in alto con i numeri più lenta vado...ci vuole un certo tempo di esecuzione!
    cogli l'attimo

  3. #3
    No. Ci deve essere una soluzione migliore che risolva il problema in meno di 2 sec per qualsiasi input minore di 10^18. Forse il problema sta in quel "Tutti i divisori primi di x non superano 1000" che non ho capito cosa significa...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.