“神秘的”;数组中未初始化的值;Perl挑战的in算法

“神秘的”;数组中未初始化的值;Perl挑战的in算法,perl,initialization,Perl,Initialization,目前正在学习Perl,并试图解决一个小挑战,即从前4000000个Fibonacci项中找到偶数项之和。我创建了一个似乎有效的斐波那契数组,然后尝试了不同的方法抛出奇数值项,并在尝试对结果数组求和时不断遇到错误,得到以下报告: Use of uninitialized value in addition (+) at prob2_3.plx line 23 以下是我所拥有的: #!/usr/bin/perl -w # prob2_2.plx use warnings; use strict;

目前正在学习Perl,并试图解决一个小挑战,即从前4000000个Fibonacci项中找到偶数项之和。我创建了一个似乎有效的斐波那契数组,然后尝试了不同的方法抛出奇数值项,并在尝试对结果数组求和时不断遇到错误,得到以下报告:

Use of uninitialized value in addition (+) at prob2_3.plx line 23
以下是我所拥有的:

#!/usr/bin/perl -w
# prob2_2.plx
use warnings;
use strict;

my @fib; my $i; my $t; my $n;
@fib = (1, 2);



for ($i=2; $i<4000000; $i++)  {
  my $new= ( $fib[$i-1] + $fib[$i-2] );
  push @fib, $new;}


for ($t=3; $t<4000000; $t++)  {
  if (($fib[$t] % 2) != 0 ) {
  delete $fib[$t];  }  }

my $total = 0;

for ($n=1; $n<$#fib; $n++) {
$total += $fib[($n+1)];}  

print  $total;
#/usr/bin/perl-w
#prob2_2.plx
使用警告;
严格使用;
我的小谎;我的$i;我的$t;我的$n;
@fib=(1,2);

对于($i=2;$i而言,警告意味着您正在向某个内容添加
undef
删除$fib[$t];
是一种不好的做法,
$fib[$t]=undef;
,您稍后将其添加到
$total


您至少有一个其他错误:

前两个是0和1,而不是1和2


你有一个大问题:

第4000000个Fib数字将非常大,太大,无法容纳一个双精度

供参考之用

第10000位有2090位数字:20793608237133498072721126489886428368225087036094015903119689458665285041423455664892745630522651559175734329719015810624794272267250973176133810179902738038317897483462355648319115919245323944200280678103204087244693462849062862838083808048250920493340878324673326262626262626262626262626383808380838078787878467474748787873773838383838383838383838383838351863155040408101726038120291994389237094285260164739821355447908182359371542956694514931299366484677909043779928477367537928427066017513466483326637769864201210689135579114187277693408080350495679409464829288056605636471818766266897075853738335267742083557415594565854200363476532454100612101244678568917149480326240860269309121160197393822944663604990153196328615969907788042772028923553932967187718291564341907918652511867885682160089752017107049943765706734240087108390881180097625972743182053955425686946081535591845825339823438236043576275982317989611674842426954592463320461413799285081435201873848092358155398899089715146940613169561449778372074346137375621868510685682609069633981549092125371453724186691160425059735374782373326817818219850924022695582641601669008474981607284358248861318482990538315018004784435375155420157383310552198099812383325326122868982405177784658846107979080782836713238479845179401107656905752215868037896153216085838722388297438048393192954122210080031358068858500259887956646322142782044849256507310659580883740164899642356338610978204563412246787292184560640917436063561821688381256232166444282295253757749271536532113420453068674243545450510326976814437011849490639025493494235890403150987736972243705338316536038859511698024592793522590153763492565487238087718300830107456944400242643641475690509453507280476468449210568002473991449055590439136921869638709291818924615710345038705022930060324161141070745396008017092827795183476321670524248582080142386652663381608292144288309546325908047181932920171014782802522138565634020748979631766327887220760779103443170011275355881347888872750382538906682309868335569571813786788298211171079642270677853691319234273336455672792801895398915310604737974128079409163942990879665029460356651238230626

20000th有4180位数字:1564443471097638497347653640727434581620505946685591588318124541740458038582433819127479345041433161036712377970878184052487157588984639531435101792632666883301118849169885037725338358812017943059782268835280360618754466932406192676746469146464646466969694646464646674646464646464646464646464646464646464646464646464646464646464646464646464646464669696969959595959595216969696980808073737373737380808080737373735609760351083689968282782762685127441783856595846488154988815451156568771516208152702742116792671059216940576437287202326579185127952652109773980204779673801388551261626727322002409621478013256747971164356737251780824526256056242665165939101383798847650612464909253830782732628596463726832802976570798460712096159979633671463236249716995241316337055831128361296103358883633435243286033222287864895050815433116567861737309793964764801555278263839265493855172428938601756693298206544139202536921373467673984506895696627853675723597742112756505546706090653338300162592597859547218109115106279850728679875472845035826608974461646591425579976443150855948585363784108252178032271074802954600198046099069599908704661773131760849831642816417996715035093937470220182181889534962185895489306103459895434193985097367387094618307972802910562478216182762666136701767368192225760417881015443846208021779448910967838688115382683807583205819115313370404262815641934451691786736975534513561898691764200452150953843620429861813036340139554793317764376016113563835708864901446935800651830040403643111314377796939158424693424580073980913561974459880897762824530994153792843943160866552330889496731060052949844694393366546840630629276294240978609784787524001403635391792815622044665057951409203125430805931493161872669237664098744645927633119695078006366417175111008764464977305821311764064008510055292787840451627946143750385701739893709704260725805961225787830700700208691321092262676072834290127276840897490600792122744624255226136250547175172290655823553370907054810978951992040552164783616415667530478409778243586516564040189710782885912183152112656744661171607707576925707277369794706432983696924985238297620234803742588903109002097624069194974216008873335787556184176019479953481549610410690318471391984766225348380613831244057873212285538834884873601821703287701353100465390233569276190098870930279768526550197262821752886655199547952619562650324716407379378738164338836561848863025560089092455251176769098918631685915930643847709745858588982932693819812988495317843741131548671992741215105455172632542174746269812576776198730081274488004812213895374679603848528145208668080980346935047084418437525862081065274599263145907619261379754548677565141069932728908962859358839514253165908393374639966616186359735773529038737616144028073139870303059041095784004759172163511767719049465865825677095260531460468770438883389730044730032249172056972231175687453487114543510159634678745425
my $i; for ($i=2; $i<4000000; $i++)
for my $i (2..$N-1)
my $N = 4_000_000;
for ($t=3; $t<4000000; $t++)  {
  if (($fib[$t] % 2) != 0 ) {
  delete $fib[$t];  }  }

my $total = 0;

for ($n=1; $n<$#fib; $n++) {
$total += $fib[($n+1)];}  
use strict;
use warnings;
use Math::BigInt 'lib' => 'GMP';

my $fib_A = Math::BigInt->new(0);
my $fib_B = Math::BigInt->new(1);
my $sum = Math::BigInt->new(0);

# get the next 3999998
for (1..(4000000-2)) {
    my $next = $fib_A + $fib_B;
    $sum += $next if $next % 2 == 0;
    ($fib_A, $fib_B) = ($fib_B, $next);
}

print "The sum is $sum\n";