gpt4 book ai didi

c - 打印出特定间隔之间的完美数字

转载 作者:行者123 更新时间:2023-11-30 16:26:34 24 4
gpt4 key购买 nike

// starting, end,  number, sum of the divisor, delimiter 
int pocetok, kraj, broj, zbir_na_deliteli=0, delitel=1;
printf("Vnesi go intervalot: "); // Enter the interval
scanf("%d%d", &pocetok, &kraj);

for(broj=pocetok;broj<=kraj;broj++)
for(;delitel<broj;delitel++){
if(broj%delitel==0)
zbir_na_deliteli+=delitel;
}
if(zbir_na_deliteli==broj)
// The number %d is a perfect number
printf("Brojot %d e sovrshen broj\n", broj);
}

这是我写的程序。我实际上是在将它与一个已解决的程序进行逐行比较,该程序执行完全相同的操作,只是一个可以工作,但这个不能。

有人可以向我解释一下我做错了什么吗?

最佳答案

Can someone explain to me what am I doing wrong?

计数器delitel需要在每个循环1处重新启动

    // for(;delitel<broj;delitel++){
for (int delitel = 1; delitel < broj; delitel++) {

Sum zbir_na_deliteli 每次循环需要重置为 0

  for (int broj = pocetok; broj <= kraj; broj++) {
int zbir_na_deliteli = 0;

示例代码:

void Printing_out_the_perfect_numbers(int pocetok, int kraj) {
for (int broj = pocetok; broj <= kraj; broj++) {
int zbir_na_deliteli = 0;
for (int delitel = 1; delitel < broj; delitel++) {
if (broj % delitel == 0) {
zbir_na_deliteli += delitel;
}
}
if (zbir_na_deliteli == broj) {
printf("Brojot %d e sovrshen broj\n", broj);
}
}
}

int main() {
Printing_out_the_perfect_numbers(1, 10000);
}

输出

Brojot 6 e sovrshen broj
Brojot 28 e sovrshen broj
Brojot 496 e sovrshen broj
Brojot 8128 e sovrshen broj
<小时/>

更快的方法不会测试 broj 的除法,而是测试 broj 的平方根。不要直接计算平方根,而是记录商和余数。许多编译器将在一次计算中提供商和余数(%/),这样就不会产生额外昂贵的除法。

void Printing_out_the_perfect_numbers(int pocetok, int kraj) {
for (int broj = pocetok; broj <= kraj; broj++) {
int zbir_na_deliteli = 0;
int kvocient = broj;
for (int delitel = 1; delitel < kvocient; delitel++) {
if (broj % delitel == 0) {
kvocient = broj / delitel;
zbir_na_deliteli += delitel;
if (kvocient > delitel) {
if (delitel != 1) zbir_na_deliteli += kvocient;
} else {
break;
}
}
}
if (zbir_na_deliteli == broj) {
printf("Brojot %d e sovrshen broj\n", broj);
}
}
}
<小时/>

参见Perfect numberPernicious number

关于c - 打印出特定间隔之间的完美数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53016104/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com