Numeri perfetti
In matematica, un numero perfetto è un numero naturale che è uguale alla somma dei suoi divisori primi e non positivi, escludendo il numero stesso.

#include<iostream> using namespace std; /*numeri perfetti: somma dei sui divisiori sia primi che non primi, escluso se stesso*/ int main() { int n,sommaperfetti=0,sommadivisori=0,j=1; cout<<"Immetti n\n"; cin>>n; /*cerco i divisori perfetti da 1 a n immesso*/ cout<<"da 1 a "<<n<<" ci sono i seguenti numeri perfetti:"; for(int i=1;i<=n;i++) { j=1; int tmp=i; /*scompongo il numero nei sui divisori primi*/ while(tmp/j>0) { /*se è divisore*/ if(tmp%j==0) { tmp/=j; /*sommo i divisori primi*/ sommaperfetti+=j; j=1; } j++; } /*cerco i divisori da 1 a n escluso immesso*/ j=1; int tmp1=i; for(int j=1;j<tmp1;j++) { /*se è divisore*/ if(tmp1%j==0) { /*sommo i divisori*/ sommadivisori+=j; } } /*visualizzo se la somma dei divisori primi o non primi è uguale*/ if(sommaperfetti==i || sommadivisori==i) cout<<i<<" "; sommaperfetti=0; sommadivisori=0; } cout<<endl; }
/*calcola i numeri perfetti da 1 a n compreso*/ public class perfetti { private int n; private int sommaprimi; private int sommaNONprimi; public perfetti(int n) { sommaprimi=0; sommaNONprimi=0; this.n=n; } /*metodo che verifica se un numero è perfetto oppure no*/ public boolean vperfetto(int n) { sommaprimi=0; sommaNONprimi=0; /*per verificare se un numero è perfetto bisogn verificare che la somma dei suoi divisori primi e non primi dia il numero stesso*/ /*troviamo prima i divisori non primi e li sommiamo*/ for(int i=1;i<n;i++) { if(n%i==0) sommaNONprimi+=i; } /*troviamo i divisori primi e li sommiamo*/ int j=1; int tmp=n; while(tmp/j>0) { if(tmp%j==0) { sommaprimi+=j; tmp/=j; j=1; } j++; } if(sommaNONprimi==n || sommaprimi==n) return true; else return false; } public void vedi_perfetti() { for(int i=1;i<=n;i++) { if(vperfetto(i)==true) System.out.print(i+" "); } } public static void main(String[] args) { perfetti p=new perfetti(8128); p.vedi_perfetti();; } }