tìm các cặp số thân thiết trong lập trình c/c++

lập trình c/c++ tìm các cặp số thân thiết. các cặp số thân thiết là số:
ví dụ:
220 có ước số là: 1,2,4,5,.....220
284 có ước số là: 1,2,....284
tổng các ước số của 220 (trừ chính nó ra) = 284;
tổng các ước số của 284( trừ chính nó ra) = 220;
như vậy trong anh có tôi và trong tôi có anh là cặp số thân thiết.
chương trình chạy hơi lâu vì các cặp số thân thiết là rất ít nhưng rất lớn, ví dụ như 220-284, 1184-1210,... 
bạn đọc hay suy ngẫm cải tiến thuật toán để việc tìm nhanh hơn



#include<iostream>
using namespace std;
int thanthiet(unsigned long a,unsigned long b)
{
long x=0,y=0;
for(int i=1;i<a;i++) if(a%i==0) x+=i;
for(int i=1;i<b;i++) if(b%i==0) y+=i;
if(x==b && y==a) return 1;
return 0;
}
void main()
{
unsigned long a,b;
for(a=220;a<=4000000000;a++)
for(b=a+10;b<1.5*a;b++)
if(thanthiet(a,b)) cout<<a<<" - "<<b<<endl;
system("pause");
}

Không có nhận xét nào:

Đăng nhận xét