Как найти остаток от деления в массиве

Which is the best way to find out whether the division of two numbers will return a remainder?
Let us take for example, I have an array with values {3,5,7,8,9,17,19}. Now I need to find the perfect divisor of 51 from the above array. Is there any simpler way to solve this?

Jens Gustedt's user avatar

Jens Gustedt

76.4k6 gold badges101 silver badges176 bronze badges

asked Aug 9, 2011 at 9:24

Vivek's user avatar

1

You can use the % operator to find the remainder of a division, and compare the result with 0.

Example:

if (number % divisor == 0)
{
    //code for perfect divisor
}
else
{
    //the number doesn't divide perfectly by divisor
}

answered Aug 9, 2011 at 9:26

Mircea Nistor's user avatar

Mircea NistorMircea Nistor

3,1181 gold badge26 silver badges32 bronze badges

3

Use the modulus operator %, it returns the remainder.

int a = 5;
int b = 3;

if (a % b != 0) {
   printf("The remainder is: %i", a%b);
}

answered Aug 9, 2011 at 9:25

MByD's user avatar

MByDMByD

135k28 gold badges264 silver badges275 bronze badges

7

All the above answers are correct. Just providing with your dataset to find perfect divisor:

#include <stdio.h>

int main() 
{

int arr[7] = {3,5,7,8,9,17,19};
int j = 51;
int i = 0;

for (i=0 ; i < 7; i++) {
    if (j % arr[i] == 0)
        printf("%d is the perfect divisor of %dn", arr[i], j);
}

return 0;
}

answered Aug 9, 2011 at 9:33

hari's user avatar

harihari

9,38327 gold badges74 silver badges110 bronze badges

1

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
59
60
61
62
63
64
65
66
67
68
69
70
71
// секция заголовочных файлов
#include <stdio.h>
#include <math.h>
 
// секция обявлений и прототипов
int main(void);
 
 
 
// секция с телами функций
 
int main(void)
{
  unsigned int S = 0;
  unsigned int A = 0;
  unsigned int B = 0;
  unsigned int C = 0;
  unsigned int D = 0;
  unsigned int E = 0;
  unsigned int x = 0;
  int a[]={50, 100, 500, 1000, 5000}; // массив a содержит 5 элементов
 
 S = 49;
 A = 99;
 B = 499;
 C = 999;
 D = 4999;
 E = 5000;
 
  scanf("%d", &x);
 
 
 
if (x <= S)
{
printf("%dn", x);
}else{
  if ( x <= A )
  {
      printf("%d %s %d %dn",x/a[0],"X" ,a[0], x%a[0] );
 
  }else{
        if(x <= B)
        {
            printf("%d %s %d %dn",x/a[1],"X" ,a[1], x%a[1] );
            return(1);
        }else{
              if(x <= C)
               {
               printf("%d %s %d %dn",x/a[2],"X" ,a[2], x%a[2] );
               return(2);
               }else{
                    if(x <= D)
                      {
                          printf("%d %s %d %dn",x/a[3],"X" ,a[3], x%a[3] );
                          return(1);
                      }else{
                            if(x >= E)
                              {
                                printf("%d %s %d %dn",x/a[4],"X" ,a[4], x%a[4] );
                                  return(1);
                              }
                           }
                    }
 
             }
       }
}
 
return(0);
}

Формулировка задачи:

В общем здесь проблема такая дано 2 массива a и tmp, первый обычный, второй-список. Мне нужно определенную часть элементов первого массива разделить на каждый элемент второго. Если остаток деления ноль, то занулить элемент первого массива. VS ругается на строку условия.

for (int i = p, j = 0; i < N; i++)
            {
                 if (a[i] % tmp[j] != 0) //ошибка здесь
                            {
                                a[i] = 0;
                                j++;
                            }
                     
            }

Подскажите, пожалуйста, что не так?

Код к задаче: «Массивы и остаток от деления»

textual

List<int> tmp = new List<int>();
 
            int[] a = new int[cnt];
 
            for (int i = 0; i < cnt; i++)
            {
                a[i] = i;
            }
 
            a[0] = 0;
            a[1] = 0;
 
            for (int i = 0; i < a.Length; i++)
            {
                if (a[i] == 0)
                    continue;
 
                tmp.Add(a[i]);
                for (int j = i + 1; j < a.Length - (i + 1); j++)
                {
                    if (a[j] == 0)
                        continue;
 
                    if (a[j] % i == 0)
                    {
                        a[j] = 0;
                    }
                }
            }

Полезно ли:

8   голосов , оценка 4.250 из 5

Возвращает остаток от деления по элементам.

Вычисляет остаток, дополнительный к функции floor_divide . Он эквивалентен оператору модуля Python x1% x2 и имеет тот же знак, что и делитель x2 . Функция MATLAB, эквивалентная np.remainder , — это mod .

Warning

С этим не стоит путать:

  • math.remainder Python 3.7 и remainder C , который вычисляет остаток IEEE, который является дополнением к round(x1 / x2) .
  • Функция MATLAB rem и / или оператор C % , который является дополнением к int(x1 / x2) .
Parameters
x1array_like

Dividend array.

x2array_like

Массив делителей. Если x1.shape != x2.shape , они должны транслироваться в общую форму (которая становится формой вывода).

out ndarray, None или кортеж из ndarray и None, необязательно

Место,в которое сохраняется результат.Если предоставлено,оно должно иметь форму,на которую транслируются входы.Если не указано или None,возвращается свежераспределенный массив.Кортеж (возможен только как аргумент ключевого слова)должен иметь длину,равную количеству выходов.

wherearray_like, optional

Это условие транслируется по входу. В местах, где условие истинно, массив out будет установлен на результат ufunc. В другом out массив out сохранит свое исходное значение. Обратите внимание , что если инициализирован out массива создается по умолчанию out=None , места в нем , где условие ложно будет оставаться инициализирован.

**kwargs

Для других аргументов, содержащих только ключевые слова, см. Документацию ufunc .

Returns
yndarray

floor_divide(x1, x2) остаток от частного floor_divide (x1, x2) . Это скаляр, если и x1 , и x2 являются скалярами.

Notes

Возвращает 0, если x2 равно 0, и оба x1 и x2 являются целыми числами (массивами). mod — это псевдоним remainder .

Examples

>>> np.remainder([4, 7], [2, 3])
array([0, 1])
>>> np.remainder(np.arange(7), 5)
array([0, 1, 2, 3, 4, 0, 1])

Оператор % может использоваться как сокращение для np.remainder в ndarrays.

>>> x1 = np.arange(7)
>>> x1 % 5
array([0, 1, 2, 3, 4, 0, 1])

по сей день актуален для многих новичков вопрос!
формула по теореме такая: a = b*c +r
где:

  • a — делимое (что делим)
  • b — делитель (на что делим)
  • с — целое число до запятой от результата деления (поэтому в случае a<b всегда будет 0 ноль)
  • r — то, что нужно прибавить, чтобы формула наша сошлась (тот самый измученный нами «остаток»! :))

Например, если мы хотим увидеть остаток от деления a=1 на b=6:

1 = 6*c + r
(с = 1/6=0,###)

поэтому

1 = 6*0 + r
r = 1 - 0 = 1
a%b=1

Второй пример когда a>b,
a=8, b=3:

8 = 3*с + r
(с = 8/3=2,###)

поэтому

8 = 3*2 + r
r = 8 - 6 = 2
a%b=2

Этот самый расчудесный остаток % при условии a<b может использоваться, например, в коде js для универсальных циклов с массивами (таких как зацикленные слайдеры и т.п., где количество элементов в массиве может изменяться и не должно влиять на исполняемый код)

Понравилась статья? Поделить с друзьями:
  • Как найти пушкинский музей
  • Как найти абонента если телефон отключен
  • Как найти длину высоты треугольника авс
  • Как найти почтовый ящик gmail com
  • Как найти тождество многочлена