Форум программистов, компьютерный форум CyberForum.ru

Определить, содержит ли последовательность хотя бы одно простое число - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ массив и возрастающая последовательность http://www.cyberforum.ru/cpp-beginners/thread168850.html
#include <iostream> using namespace std; void main() { int t; int n; for (int i=0; i<5; i++) { cin >> t;
C++ Динамический массив для каждого массива определить минимальный по модулю элемент и количество положительных элементов массива расположенных ЗА ним. а он считает ПЕРЕД ним. не понимаю как изменить... #include <stdio.h> // Подключение внешних файлов(библиотек) #include <math.h> #include<conio.h> #include <iostream> using namespace std; //... http://www.cyberforum.ru/cpp-beginners/thread168847.html
C++ Определить количество корней уравнения х2 = A + 1
Написать программу, которая по заданному значению А определяет количество корней уравнения х2 = A + 1 и выводит значения корней вместе с необходимыми сообщениями.
Инкапсуляция, иттераторы, абстрактные списки на С C++
Сразу подчеркиваю, что реализовать программу надо на С, а не на С++, что, собственно и портит всю малину. Задание следующие: существуют некоторые "животные", которые инициализирующий в программе единым методом, потом абстрактный список животных передается другому методу, который при помощи итератора этих животных "кормит", ну, по какому-то там параметру. Будь это С++, тут никаких проблем в...
C++ В MVS использование генератора случайных чисел http://www.cyberforum.ru/cpp-beginners/thread168750.html
Задача такова - Даны n прямоугольников со сторонами, параллельными осям координат, заданных координатами своей левой нижней и правой верхней вершин и m точек. Найти пару прямоугольник - точка, для которой расстояние от точки до вершины прямоугольника минимально. Исходные данные получить с помощью генератора случайных чисел. Решение проиллюстрировать графически. Все бы ничего, но не знаю как...
C++ Упорядочивание массива дан массив вещественных чисел требуется написать функции, которые 1. упорядочивают по убыванию 2.упорядочивают по возрастанию 3.создадут новый массив, элементы которого будут те элементы первого массива, которые больше среднего значения всех элементов подробнее

Показать сообщение отдельно
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
24.09.2010, 20:21     Определить, содержит ли последовательность хотя бы одно простое число
Dzhej-Dzhej, это из-за overflow. Я вечером дам безошибочный алгоритм. Надо просто по-другому посчитать степень по модулю.

Добавлено через 2 часа 37 минут
Вот код, который корректно ищет простые числа в диапазоне от 3 до 1000 (немного жутковато, но зато быстро):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <iostream>
 
int log2(unsigned long x)
{
    if (x==0) return -1;
    int n=0;
    if (x<=0x0000FFFFul) {n+=16;x<<=16;}
    if (x<=0x00FFFFFFul) {n+=8 ;x<<=8;}
    if (x<=0x0FFFFFFFul) {n+=4 ;x<<=4;}
    if (x<=0x3FFFFFFFul) {n+=2 ;x<<=2;}
    if (x<=0x7FFFFFFFul) {n+=1 ;}
    return 31-n;
}
 
int bit_length(int x)
{
    return log2(x)+1;
}
 
 
bool get_bit(int val, int index)
{
    unsigned n=(1<<index);
    return (bool)(((unsigned)(val))&n);
}
 
 
int powmod(int x, int y, int mod)
{
    int *a=new int[bit_length(y)];
    a[0]=x%mod;
    for(int i=1;i<bit_length(y);i++)
        a[i]=(a[i-1]*a[i-1])%mod;
    int res=1;
    for(int i=bit_length(y)-1;i>=0;i--)
        if(get_bit(y, i))
            res=(res*a[i])%mod;
    delete[] a;
    return res;
}
 
 
bool is_simple(int n)
{
    if(n==3) return true;
    return powmod(3, (n-1), n) == 1;
}
 
int main(int argc, char* argv[])
{
    for(size_t i=3;i<1000;i++)
    {
        if(is_simple(i))
            std::cout<<i<<std::endl;
    }
    std::system("pause");
    return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru