Da Project Euler, problem 45:Project Euler numero 45
Triangle, pentagonali e esagonali numeri sono generati dalle seguenti formule:
Triangle T_ (n) = n (n + 1)/2 1, 3, 6, 10, 15, ...
pentagonale P_ (n) = n (3n-1)/2 1, 5, 12, 22, 35, ...
esagonale H_ (n) = n (2n-1) 1, 6, 15, 28, 45, ...
si può verificare che T_ (285) = P_ (165) = H_ (143) = 40755.
Localizzare il numero successivo triangolo che è anche pentagonale e esagonale.
Ecco la domanda. È piuttosto semplice e diretto, ma il fatto è che il mio programma si trova in un problema tecnico, nel momento in cui il valore del numero del triangolo supera il valore massimo che è possibile avere nel tipo di dati int. Ho provato a cercare la rete per altri tipi di dati, ma senza successo.
Codice
#include<stdio.h>
int main(void)
{
int i,j,t,h,p,k;
int n=10000;
for(i=0;i<n;i++)
{
t=(i*(i+1))/2;
for(j=0;j<n;j++)
{
h=j*(2*j-1);
if(h>t)
break;
if(h==t)
{
//printf("%d %d\n",h,t);
for(k=0;k<n;k++)
{
p=(k*(3*k-1))/2;
if(p>h)
break;
if(p==h)
{
printf("%d %d\n",p,i);
break;
}
}
}
}
}
printf("done\n");
return(0);
}
Puoi dirmi il segnaposto per favore? –
nomecomando long lungo non firmato; – johnathon
Sostituisci ogni 'int' del nostro programma con' unsigned long long ', e cambia gli specificatori di formato da '% d' a'% llu'. –