这是使用该特定算法的已完成程序之一。
program Lotto
implicit none
INTEGER::MAXTHREADS
INTEGER::I,N,Q,RAN,RAN4(4),N129(9),LOTTO5(5)
REAL::R,TI,TIMELY,SEC
CALL RANDOM_SEED()
!____________________________________________________________________________
!____________________________________________________________________________
N=0
RAN4=0
DO
CALL RANDOM_NUMBER(R)
RAN=1+INT(9*R)
IF(COUNT(RAN==RAN4(1:4))/=0)CYCLE
N=N+1
RAN4(N)=RAN
IF(N==4)EXIT
ENDDO
N129=[1,2,3,4,5,6,7,8,9]
N129(RAN4(1:4))=0
N=0
DO I=1,9
IF(N129(I)==0)CYCLE
N=N+1
LOTTO5(N)=I
ENDDO
PRINT*,LOTTO5
end program Lotto
在回复我的原始帖子时,High Performance Mark提出了两个重要的观察结果:
在没有看到使用它的上下文的情况下,几乎没有关于代码片段的说法;和
可能不值得花时间去处理那些轻微的事情。 (道歉的道歉。)
以上简短程序“Lotto”仅作为次要演示,在上下文中显示如何使用过滤算法。当然,作为只有几行代码的集合,它可能无法改进。但是,我原本希望如此。当每天处理1500到2000行新的Fortran代码时,类似的代码片段在同一个程序中出现10或12次,如果你可以改进(优化)一个,你可以优化它们以至少减少一些执行时间,这间接地说明了HPM的第二次观察。作为Fortran程序员,我只有一个目标,那就是以尽可能短的执行时间产生预期的结果。这是说出来的好方法。更现实的说法是:“为了产生预期的结果,花费最少的钱。”由于“优化”是Stack Overflow使用的众多标签之一,我希望可以追求一些涉及优化的讨论,但显然事实并非如此。我认为其他一些论坛。一些年轻用户可能对代码优化的工作方式感兴趣,但是他们中的许多人似乎都非常关注他们最难立即无法正确执行某些代码集合。
HPM的评论总是在他评论帖子时发现,所以这是我对他的最后两个道歉:
你删除陈述是正确的。有15个操作Fortran语句,3个评论行,& 2个OMP指令构成了该计划的“准备”部分。从这20个中我应该省略其中的14个,包括3个注释行&为清楚起见,2 OMP指令。我现在删除了它们。但是,我的Microsoft Visual Studio设置为使用OMP执行所有程序,它也按照它的方式执行“Lotto”,提供线程计数和其他线程信息。 Lotto在OMP中运行良好,但出于演示目的,我当然不需要所有的“生菜”。
我很抱歉多语句行。我不会在普通的编程中使用它。它就在那里,因为我一直认为Stock Overflow希望他们打印的程序尽可能简洁明了。我错了吗?我已经删除了多层衬里。