c++问题,关于亲密数的

来源:百度知道 编辑:UC知道 时间:2024/08/23 22:42:55
//求什么亲密数的程序
#include <iostream.h>
#include <iomanip.h>
#include <math.h>

int f(int n)
{
int sum=0,i=1;
while (i<n){ // 把n改成 int ( sqrt (n)) 就没结果了,6.0 为什么?谢谢大家!!!!!!!!!!! //改成i*i<n也不行,为什么?
if(n%i==0) sum=sum+i;
i++;
}
return sum;
}

void main()

{
int n,m,count=0;
cout<<"input m,n 10<m<n<32000"<<endl;
cin>>m>>n;

while(m<n){
if ( (m<f(m)) && m==f(f(m)) && f(m)<n ) {
cout<<setw(14)<<m<<" and "<<f(m)<<"";
count++ ;
if((count%3)==0) cout<<endl ;
}

m++;
}

}
已经知道要换成n/2了,但还是很慢,有没有更快一点的代码,谢谢了。

# include <iostream.h>
#include <iomanip.h>
#include <stdio.h>
#include <windows.h>

int f32(int m)
{
int sum=0,i=1;
for (i=1;i<= m/2;i++)
//while (i<int(m/2))
{if(m%i==0) sum=sum+i;}
//i++;

return sum;
}

int f22(int n)
{
int sum=0,i=1;
//while (i < (int)sqrt(n))
{
if(n % i == 0)
{
if(i == 1) //因为不能包括这个数自身,所以假如i为1,不能加n/i,因为n/i就等于这个数本身
sum += i;
else
sum += (i + n / i); //加上与它相对的因子的和,不然怎么能得到这个数另一半的因子?
}
i++;
}
return sum;
}

int f(int m)
{
int p=1,sum=0;
while(p*p<=m){
if(m%p==0){
sum=sum+p+m/p;}
p=p+1;
}
return sum-m;
}

void main()

{

int n,m,count=0;
cout<<"input m,n 10<m<n<32000"<<endl;
cin>>m>>n;