因子完备数c语言,编写函数输出完备数及其所有约数

如果一个数正好是他的所有约数(除了它本身以外)的和,称为完备数,

如:6,它的约数有1,2,3,并且1+2+3=6.求出30000以内的所有完备数,并显示输出。

(求完备数用函数实现)(参考函数原型:void find(int j),直接在函数中输出小于等于j的完备数及其所有约数)

输入输出格式要求:

编写函数void find(int j);直接在函数中输出小于等于j的完备数及其所有约数

输出格式:

完备数=约数+约数+约数...回车

(约数从小到大)

例如:

find(40);

输出:

6=1+2+3回车

28=1+2+4+7+14回车

#include

#include

void find(int m)

{

int count;

int i, j;

for (i = 4; i <= m; i+=2)//迄今发现的完数都是偶数,所以只考察m内的偶数

{

for (count=1,j = 2; j*j <= i; j++)//用2、3、4……去除i,直到i的平方根

{

if (!(i%j))

count += (j != i / j ? j + i / j : i);//若能整除则把由下一句把因子加到count上,count初值=1是因为1肯定是因子

}

if (count == i)

{//当因子和count等于i时i就是完数,由以下语句输出因子和的表达式

printf("%d=1", i);

for ((count >>= 1) += 1, j = 2; j < count; j++)//用2、3、4……去除这个完数,直到它的一半,也可以用数组记录下每个因子,然后输出数组的每个元素

{

if (!(i%j))//若能整除,则j就是它的一个因子

printf("+%d", j);//将这个因子用+号连接输出

}

printf("\n");//结尾按照格式要求输入回车符

}

}

}

int main()

{

int m;

scanf_s("%d", &m);

find(m);

system("pause");

return 0;

}

C语言中,直接获取计算机的物理内存信息通常是系统级别的操作,不是标准库提供的功能。然而,你可以使用一些特定于平台的API或者第三方库来实现这个功能,例如在Windows平台上可以使用`Windows API`中的`GlobalMemoryStatusEx`函数,而在Linux或Unix-like系统上可以使用`/proc/meminfo`文件。 这里提供一个基本的Windows示例,使用Win32 API,但请注意这需要编译为Windows可执行文件: ```c #include <windows.h> #include <stdio.h> void GetSystemMemoryInfo() { MEMORYSTATUSEX memStat; memStat.dwLength = sizeof(MEMORYSTATUSEX); GlobalMemoryStatusEx(&memStat); DWORD availableMB = memStat.ullAvailPhys / (1024 * 1024); // MB printf("Available physical memory: %.1f MB\n", availableMB); } int main() { if (GetSystemMemoryInfo()) { return 0; } else { printf("Failed to get system memory information.\n"); return 1; } } ``` 在Linux或Unix-like系统上,你需要读取`/proc/meminfo`文件,这通常涉及到I/O和字符串处理,代码会稍微复杂些。下面是一个简化的示例,实际操作可能需要链接到`sys/sysctl.h`或使用类似`libudev`的库: ```c #include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <sys/ioctl.h> #include <linux/hwinfo.h> // Linux-specific for querying memory int main() { int fd = open("/proc/meminfo", O_RDONLY); if (fd == -1) { perror("Failed to open /proc/meminfo"); return 1; } char buffer[1024]; ssize_t bytes_read = read(fd, buffer, sizeof(buffer)); if (bytes_read <= 0) { perror("Failed to read /proc/meminfo"); close(fd); return 1; } close(fd); // Extract available memory line and convert to MB char* memline = strstr(buffer, "MemFree:"); if (memline) { size_t memfree_idx = memline + strlen("MemFree:"); memline += memfree_idx; // Skip ':' long memfree_in_bytes = strtol(memline, NULL, 10); long availableMB = memfree_in_bytes / (1024 * 1024); printf("Available memory: %.1f MB\n", availableMB); } else { printf("Failed to find MemFree line in /proc/meminfo.\n"); } } ``` 这些代码示例都需要编译时链接到对应的库,并且在实际环境中可能需要处理异常情况。由于跨平台支持的复杂性,如果你在生产环境中使用,可能需要封装成更健壮的库函数或者使用第三方库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值