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();;



}




}