Solving Perfect Number Program in C

  • Thread starter Thread starter Dili
  • Start date Start date
AI Thread Summary
The discussion revolves around writing a C program to determine if a number is perfect, with examples like 6 and 28. An initial code snippet was provided but contained errors in variable initialization and parentheses placement. A corrected version was shared, emphasizing proper logic and variable initialization. Additionally, an alternative, faster implementation using the Euclid identity for perfect numbers was introduced, showcasing a more efficient algorithm. The conversation also touched on the difference between return values in C, where return 0 indicates normal termination and return 1 indicates an error. Overall, the focus was on improving the program's functionality and understanding C programming concepts.
Dili
Messages
13
Reaction score
0
I need to write a program to check whether a number is perfect
eg: 6=1+2+3 , 28=1+2+4+7+14
i wrote one, but it doesn't work. also I've seen programs written with different preprocessors, we are required to write it on stdio.h and math.h


#include<stdio.h>
#include<math.h>

int main()
{
int a,b,c,d,i;
scanf("%d",&a);
{
for(i=1;i<a;i++)
b=a%i;
if(b==0)
{
c=0;
c=c+i;
}
if(c==a)
printf("perfect\n");
}
return 1;
}

 
Technology news on Phys.org
Few mistakes in variable initialization and placing of parentheses. Here is the modified correct version. Make sure you understand the logic.

#include<stdio.h>
#include<math.h>

int main()
{
int a,b,c,d,i;
scanf("%d",&a);c=0;
for(i=1;i<a;i++)
{
b=a%i;
if(b==0)
{
c=c+i;
} }
if(c==a)
printf("perfect\n");
return 1;
}
 
Heh. Here's a version you can't turn in, but which is far faster; it uses the Euclid identity of perfect numbers.

Code:
#include<stdio.h>
#include<math.h>

int is_prime(n) {
  int i,root;
  if (!(n&1))
    return n == 2;
  if (n%3 == 0)
    return n == 3;
  if (n < 25)
    return n > 1;
  root = (int)sqrt(n);
  for (i = 5; i <= root; i += 6)
    if (n%i == 0 || n%(i+2) == 0)
      return 0;
  return 1;
}

int main() {
  int even_part, odd_part;
  scanf("%d",&odd_part);
  even_part = 1;
  while (!(odd_part&3)) {
    odd_part = odd_part >> 2;
    even_part = even_part << 2;
  }
  if (!(odd_part&1)) {
    odd_part = odd_part >> 1;
    even_part = even_part << 1;
  }
  if (even_part << 1 == odd_part + 1 && is_prime(odd_part))
    printf("perfect\n");
  return 0;
}

Even faster and even cheatier, for 32-bit machines:

Code:
int main() {
  int n;
  scanf("%d",&n);
  if (n == 6 || n == 28 || n == 496 || n == 8128 || n == 33550336)
    printf("perfect\n");
  return 0;
}
 
Last edited:
Thank you very much arunbg. I am not good at C programming.
I do now understand the placing of brackets and c=0.
If no bother can you explain what is the difference between return 1 and return 0
Ive used them but with no real understanding
Thanks again
 
int main() {
int n;
scanf("%d",&n);
if (n == 6 || n == 28 || n == 496 || n == 8128 || n == 33550336 || n == 8589869056)
printf("perfect\n");
return 0;
}
Lol...nice one.
 
Dili said:
If no bother can you explain what is the difference between return 1 and return 0
Ive used them but with no real understanding

Don't worry about it. These are error codes that the program returns, but they won't display or do anything unless they're checked by an outside program. 0 is supposed to mean "terminated normally" and anything other than 0 is supposed to mean "terminated with some kind of error".
 
Thread 'Star maps using Blender'
Blender just recently dropped a new version, 4.5(with 5.0 on the horizon), and within it was a new feature for which I immediately thought of a use for. The new feature was a .csv importer for Geometry nodes. Geometry nodes are a method of modelling that uses a node tree to create 3D models which offers more flexibility than straight modeling does. The .csv importer node allows you to bring in a .csv file and use the data in it to control aspects of your model. So for example, if you...
I tried a web search "the loss of programming ", and found an article saying that all aspects of writing, developing, and testing software programs will one day all be handled through artificial intelligence. One must wonder then, who is responsible. WHO is responsible for any problems, bugs, deficiencies, or whatever malfunctions which the programs make their users endure? Things may work wrong however the "wrong" happens. AI needs to fix the problems for the users. Any way to...
Back
Top