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;
}
}
}
Bài liên quan
Sai o day i<=sqrt(a); ước của a có thể lớn hơn sqrt(a)
mình cũng bỏ đi oy để
cũng chỉ in ra giá trị 1 thui bạn à!
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
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:--------
đ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ả.
à cái dấu =, mình ko để ý, ngớ ngẩn tiệt oy! thank bạn nhiều nha!
for(uoc=1; uoc < sqrt(n); uoc++)
if(n%uoc==0) tong_uoc+=uoc+n/uoc;
if(uoc*uoc==n) tong_uoc+=uoc;
Cái hàm xét ước mình nghĩ để kiểu bool chuẩn hơn