Finding Carmichael Numbers












2














I cant seem to figure out why my python code is telling me wrong carmichael numbers. Thanks in advance. I just cant see the error in the algorithm.



def isCarmichaelNumber( x ):
for y in range(2,x):
#check if prime
if math.gcd (x, y) == 1:
if pow(y, x-1, x) != 1:
return False
return True

print(isCarmichaelNumber(1847))









share|improve this question



























    2














    I cant seem to figure out why my python code is telling me wrong carmichael numbers. Thanks in advance. I just cant see the error in the algorithm.



    def isCarmichaelNumber( x ):
    for y in range(2,x):
    #check if prime
    if math.gcd (x, y) == 1:
    if pow(y, x-1, x) != 1:
    return False
    return True

    print(isCarmichaelNumber(1847))









    share|improve this question

























      2












      2








      2







      I cant seem to figure out why my python code is telling me wrong carmichael numbers. Thanks in advance. I just cant see the error in the algorithm.



      def isCarmichaelNumber( x ):
      for y in range(2,x):
      #check if prime
      if math.gcd (x, y) == 1:
      if pow(y, x-1, x) != 1:
      return False
      return True

      print(isCarmichaelNumber(1847))









      share|improve this question













      I cant seem to figure out why my python code is telling me wrong carmichael numbers. Thanks in advance. I just cant see the error in the algorithm.



      def isCarmichaelNumber( x ):
      for y in range(2,x):
      #check if prime
      if math.gcd (x, y) == 1:
      if pow(y, x-1, x) != 1:
      return False
      return True

      print(isCarmichaelNumber(1847))






      python algorithm






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 20 at 6:21









      ShelbyJ

      183




      183
























          1 Answer
          1






          active

          oldest

          votes


















          3














          You're not checking to see whether x is prime. By definition, a Carmichael number must be composite. For any prime x, pow(y, x-1, x) == 1 for all y in range(2, x), so will incorrectly return True. 1847 is prime, which is why your function claims it's a Carmichael number.



          One way to fix it:



          def isCarmichaelNumber(x):
          import math
          isprime = True
          for y in range(2,x):
          if math.gcd(x, y) == 1:
          if pow(y, x-1, x) != 1:
          return False
          else:
          isprime = False
          return not isprime





          share|improve this answer





















            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53387324%2ffinding-carmichael-numbers%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            3














            You're not checking to see whether x is prime. By definition, a Carmichael number must be composite. For any prime x, pow(y, x-1, x) == 1 for all y in range(2, x), so will incorrectly return True. 1847 is prime, which is why your function claims it's a Carmichael number.



            One way to fix it:



            def isCarmichaelNumber(x):
            import math
            isprime = True
            for y in range(2,x):
            if math.gcd(x, y) == 1:
            if pow(y, x-1, x) != 1:
            return False
            else:
            isprime = False
            return not isprime





            share|improve this answer


























              3














              You're not checking to see whether x is prime. By definition, a Carmichael number must be composite. For any prime x, pow(y, x-1, x) == 1 for all y in range(2, x), so will incorrectly return True. 1847 is prime, which is why your function claims it's a Carmichael number.



              One way to fix it:



              def isCarmichaelNumber(x):
              import math
              isprime = True
              for y in range(2,x):
              if math.gcd(x, y) == 1:
              if pow(y, x-1, x) != 1:
              return False
              else:
              isprime = False
              return not isprime





              share|improve this answer
























                3












                3








                3






                You're not checking to see whether x is prime. By definition, a Carmichael number must be composite. For any prime x, pow(y, x-1, x) == 1 for all y in range(2, x), so will incorrectly return True. 1847 is prime, which is why your function claims it's a Carmichael number.



                One way to fix it:



                def isCarmichaelNumber(x):
                import math
                isprime = True
                for y in range(2,x):
                if math.gcd(x, y) == 1:
                if pow(y, x-1, x) != 1:
                return False
                else:
                isprime = False
                return not isprime





                share|improve this answer












                You're not checking to see whether x is prime. By definition, a Carmichael number must be composite. For any prime x, pow(y, x-1, x) == 1 for all y in range(2, x), so will incorrectly return True. 1847 is prime, which is why your function claims it's a Carmichael number.



                One way to fix it:



                def isCarmichaelNumber(x):
                import math
                isprime = True
                for y in range(2,x):
                if math.gcd(x, y) == 1:
                if pow(y, x-1, x) != 1:
                return False
                else:
                isprime = False
                return not isprime






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 20 at 6:39









                Tim Peters

                41.8k67293




                41.8k67293






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.





                    Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                    Please pay close attention to the following guidance:


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53387324%2ffinding-carmichael-numbers%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    "Incorrect syntax near the keyword 'ON'. (on update cascade, on delete cascade,)

                    Alcedinidae

                    Origin of the phrase “under your belt”?