30/09/2018, 18:17

Giúp em đoạn code tính tổng các ước của số nguyên trong C++ với?

“Một số tự nhiên được gọi là số hoàn hảo nếu các ước thực sự của nó kể cả 1 bằng chính nó . Hãy liệt kê các số hoàn hảo nhỏ hơn N.”
Em viết code theo đề bài trên, viết xong nhưng không chạy được, nhìn mãi mà không biết sai chỗ nào, Pro nào giúp em tìm ra chỗ sai với, em cảm ơn nhiều nhiều.

#include<iostream>
#include<cmath>
using namespace std;
int xetUoc(int a)
{
	int uoc=0;
	for(int i=1;i<=sqrt(a);i++)
	{
		if((a%i)==0)
		{
			uoc=uoc+i;
		}
	}
	if(uoc==a)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
int main()
{
	int a;
	cout<<" Nhap vao so N: "<<endl;
	cin>>a;
	for(int i=1;i<a;i++)
	{
		if(xetUoc(i)==1)
		{
			cout<<i<<endl;
		}
	}
}
Nguyen Ca viết 20:21 ngày 30/09/2018

Sai o day i<=sqrt(a); ước của a có thể lớn hơn sqrt(a)

Leng Keng viết 20:25 ngày 30/09/2018

mình cũng bỏ đi oy để

for(int i=1;i<=a;i++)

cũng chỉ in ra giá trị 1 thui bạn à!

Nguyen Ca viết 20:31 ngày 30/09/2018

i<=a thì đau có số nào đâu, ngoài 1 :d, bạn để nhỏ hơn a thôi (<=a/2) cũng đươc

Leng Keng viết 20:18 ngày 30/09/2018

thank bạn nha! xinh oy! mà mình vẫn chưa hiểu, để a với a/2 có khác j nhau đâu! nếu để a thì xét giá trị i rộng hơn thui mà! sao lại ko chạy được nhỉ?
giống như:smile:
a :---------------
a/2:--------

Nguyen Ca viết 20:29 ngày 30/09/2018

điều kiện số hoàn hảo là ước nhỏ hơn chính nó ví dụ, 6 là số hoản hảo do 1+2+3 =6, bạn chạy tới i <=a thì thành ra 1+2 +3 +6 =12 mất rồi, thực ra bạn chạy tới (i nhỏ hơn a) cũng được nhưng không tối ưu, do không có ước nào >=a/2 cả.

Leng Keng viết 20:23 ngày 30/09/2018

à cái dấu =, mình ko để ý, ngớ ngẩn tiệt oy! thank bạn nhiều nha!

Gió viết 20:29 ngày 30/09/2018

for(uoc=1; uoc < sqrt(n); uoc++)
if(n%uoc==0) tong_uoc+=uoc+n/uoc;
if(uoc*uoc==n) tong_uoc+=uoc;

TuMo viết 20:21 ngày 30/09/2018

Cái hàm xét ước mình nghĩ để kiểu bool chuẩn hơn

Bài liên quan
0