Armenian Knowledge Base  

Go Back   Armenian Knowledge Base > Technical sections > Languages, Compilers, Interpreters > C/C++
Register

Reply
 
LinkBack Thread Tools
Old 12.03.2006, 09:10   #1
Младенец
 
Join Date: 03 2006
Location: Tver
Age: 33
Posts: 4
Downloads: 0
Uploads: 0
Reputation: 0 | 0
Default generate

не подскажите как в билдере 6 сгенерировать 2 простых числа=)) я новичёк ешё=) не получается что то!
Reply With Quote
Old 12.03.2006, 10:55   #2
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 36
Posts: 21,717
Downloads: 2
Uploads: 0
Reputation: 250 | 8
Default Re: generate

ну например 3 и 7
а так - rand-ом генеришь числа и проверяешь на простоту... для новичка проще не придумаешь...
Reply With Quote
Old 12.03.2006, 11:06   #3
Какое небо, *, Багдад!
 
knightmare's Avatar
 
Join Date: 10 2005
Location: Ереван
Posts: 1,682
Downloads: 16
Uploads: 0
Reputation: 99 | 3
Default Re: generate

Ну, например, генерируешь любое число и находишь его наибольший простой делитель.
Reply With Quote
Old 12.03.2006, 11:24   #4
Младенец
 
Join Date: 03 2006
Location: Tver
Age: 33
Posts: 4
Downloads: 0
Uploads: 0
Reputation: 0 | 0
Default Re: generate

пример можете написать??
есть функция random, но как она работает, и какие аргументы ей писать?
Reply With Quote
Old 12.03.2006, 11:47   #5
Какое небо, *, Багдад!
 
knightmare's Avatar
 
Join Date: 10 2005
Location: Ереван
Posts: 1,682
Downloads: 16
Uploads: 0
Reputation: 99 | 3
Default Re: generate

есть rand()
делаешь два раза по [не проверял]:
---------------
unsigned int i, j;
for(i=j=1+rand(); !(j%i && is_simple(i)); i--);
//имеем нужное в i здесь
---------------
bool is_simple(unsigned int c){
unsigned int i;
for(i=2; i<c && c%i; i++);
return i==c || c==1;
}
---------------

Last edited by knightmare; 12.03.2006 at 12:19.
Reply With Quote
Old 12.03.2006, 13:56   #6
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 36
Posts: 21,717
Downloads: 2
Uploads: 0
Reputation: 250 | 8
Default Re: generate

на самом деле цикл надо завешать при i=Sqrt(c), так как если не нашлось, то и не найдется. Но, увы, это не работает для больших чисел
Reply With Quote
Old 05.01.2018, 19:03   #7
Researcher
 
AvDav's Avatar
 
Join Date: 07 2004
Location: Here I am
Age: 37
Posts: 3,500
Downloads: 22
Uploads: 0
Reputation: 228 | 3
Default

Насколько больших? Я тут на джаве функцию составил, на ура пашет до миллиона в течение секунды на проверку сотни тысяч.
Больше не пробовал. Вот код:
Code:
public class Main {
    public static boolean isPrime(int n) {
        if(1 <= n && n < 4) return true;
        if(n%2 == 0 || n%3 == 0 || n <=0) return false;
        if((n - 1)%6 == 0 && (n + 1)%6 == 0) return false;
        int r = (int)Math.sqrt(n), f = 5;
        while(f <= r) {
            if(n%f == 0) return false;
            if(n%(f+2) == 0 ) return false;
            f += 6;
        }
        return true;
    }
    public static void main(String[] args) {
        for(int i = 0; i < 1000000; ++i)
            if(isPrime(i)) System.out.printf("The number %d is prime.\n", i);
    }
}
А можно проверять делимость по простым числам. Найти их в не очень большом количестве особого труда не составит. Решето Эратосфена (до корня из n). За 1 секунду находит числа до 10^7 примерно. А дальше перебор делимости (Либо если число уже найдено Эратосфеном, то и перебирать не придётся) на простые числа, если число больше чем 10^7 также до корня из n. И всё довольно просто и быстро

Last edited by AvDav; 05.01.2018 at 19:03.
Reply With Quote
Sponsored Links
Reply

Thread Tools


На правах рекламы:
реклама

All times are GMT. The time now is 13:43.


Powered by vBulletin® Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.