Program a1
read*, M
do i=1,M
do j=2,i
if (mod(i,j)==0) then
k=k+i/j
end if
end do
if (k==i) then
write(*, "(i)")k
end if
k=0
end do
end
массив на Fortran'e
Код:
Помогите пожалуйста организовать в этой программе такую функцию : результат бы заносил в массив (проблема в том, что чем больше число M, тем больше совершенных чисел, и я не знаю как именно определить количество записей, получаемых в ответе, с последующей записью их в массив) Нипишите пожалуйста кусок кода, буду очень признателен.
Код:
Program a1
integer nums(1000)
read*, M
l=0
do i=1,M
do j=2,i
if (mod(i,j)==0) then
k=k+i/j
end if
end do
if (k==i) then
l=l+1
nums(l)=k
end if
k=0
end do
do i=1,l
write(*,*)nums
end do
end
integer nums(1000)
read*, M
l=0
do i=1,M
do j=2,i
if (mod(i,j)==0) then
k=k+i/j
end if
end do
if (k==i) then
l=l+1
nums(l)=k
end if
k=0
end do
do i=1,l
write(*,*)nums
end do
end
Примерно так
А допустим возникнет проблема если вводиться число 10000, а массив всего 1000. А как можно обьявить одномерный массив неизвесной длинны, а узнав М задать его размеры? Подскажите пожалуйста.
вроде так можно(точно не помню):
Код:
real, ALLOCATABLE :: a(:) //объявляем массив как динамический, тип данных real
INTEGER m
read *,m //считываем длину массива
allocate(a(1:m)) //теперь a массив из m элементов
INTEGER m
read *,m //считываем длину массива
allocate(a(1:m)) //теперь a массив из m элементов
Сомневаюсь, что наберется столько совершенных чисел :)
так что можно массив для хранения совершенных чисел где-то 20 сделать )
ну из 1000 их всего 3 совершеныых числа, из 10 тысяч их 4... вот и получается.