C
C#

help

# ❔ circular primes

TT3CH2/3/2023
so this program is meant to find how many circular primes there are below 1 million (should be 55), but is returning some crazy high number. where am i going wrong?
``using System;namespace CircularPrimes{    class Program    {        static void Main(string[] args)        {            int circPrimes = 0;            for (int i = 2; i <= 1000000; i++)            {                int digits = Digits(i);                if (IsCircularPrime(i, digits)) //checks if circular prime number                {                    circPrimes++;                }            }            Console.WriteLine(circPrimes);        }        public static bool IsCircularPrime(int input, int digits)        {            int temp = input;            for (int i = 0; i < digits; i++)            {                temp = Rotate(temp, 1);                if (IsPrime(temp))                {                    return true;                }            }            return false;        }        public static bool IsPrime(int input)        {            if (input <= 1)            {                return false;            }            if (input == 2 || input == 3)            {                return true;            }            if (input % 2 == 0 || input % 3 == 0)            {                return false;            }            for (int i = 5; i < Math.Sqrt(input); i++)             {                if (input % i == 0 || input % (i + 2) == 0)                {                    return false;                }            }            return true;        }        public static int Rotate(int i, int index)        {            int digits = Digits(i);            int rotated = (int)((i % Math.Pow(10, (digits - index))) * Math.Pow(10, index) + (i / Math.Pow(10, (digits - index))));            return rotated;        }        public static int Digits(long i)        {            int digits = 0;            while (i != 0)            {                i /= 10;                ++digits;            }            return digits;        }    }}``
``using System;namespace CircularPrimes{    class Program    {        static void Main(string[] args)        {            int circPrimes = 0;            for (int i = 2; i <= 1000000; i++)            {                int digits = Digits(i);                if (IsCircularPrime(i, digits)) //checks if circular prime number                {                    circPrimes++;                }            }            Console.WriteLine(circPrimes);        }        public static bool IsCircularPrime(int input, int digits)        {            int temp = input;            for (int i = 0; i < digits; i++)            {                temp = Rotate(temp, 1);                if (IsPrime(temp))                {                    return true;                }            }            return false;        }        public static bool IsPrime(int input)        {            if (input <= 1)            {                return false;            }            if (input == 2 || input == 3)            {                return true;            }            if (input % 2 == 0 || input % 3 == 0)            {                return false;            }            for (int i = 5; i < Math.Sqrt(input); i++)             {                if (input % i == 0 || input % (i + 2) == 0)                {                    return false;                }            }            return true;        }        public static int Rotate(int i, int index)        {            int digits = Digits(i);            int rotated = (int)((i % Math.Pow(10, (digits - index))) * Math.Pow(10, index) + (i / Math.Pow(10, (digits - index))));            return rotated;        }        public static int Digits(long i)        {            int digits = 0;            while (i != 0)            {                i /= 10;                ++digits;            }            return digits;        }    }}``
im pretty sure everything works up until it counts how many its returning 355112 ive tested it, the circular prime method works, its just counting wrong
HHenkypenky2/3/2023
problemas are in your rotation and iscircularprime method
``namespace CircularPrimes{    class Program    {        static void Main(string[] args)        {            int circPrimes = 0;            for (int i = 2; i <= 1000000; i++)            {                if (IsCircularPrime(i)) //checks if circular prime number                {                    circPrimes++;                }            }            Console.WriteLine(circPrimes);        }        public static bool IsCircularPrime(int input)        {            int count = Digits(input);            int num = input;            while(IsPrime(num))            {                num = Rotate(num, count);                if (num == input)                {                    return true;                }            }            return false;           }        public static bool IsPrime(int input)        {            if (input <= 1)            {                return false;            }            if (input == 2 || input == 3)            {                return true;            }            if (input % 2 == 0 || input % 3 == 0)            {                return false;            }            for (int i = 5; i < Math.Sqrt(input); i++)             {                if (input % i == 0 || input % (i + 2) == 0)                {                    return false;                }            }            return true;        }        public static int Rotate(int num, int count)        {            int rem = num % 10;            int div = num / 10;            num = (int)((Math.Pow(10, count - 1)) * rem) + div;            return num;        }        public static int Digits(int i)        {            int digits = 0;            while (i > 0)            {                i /= 10;                digits++;            }            return digits;        }    }}``
``namespace CircularPrimes{    class Program    {        static void Main(string[] args)        {            int circPrimes = 0;            for (int i = 2; i <= 1000000; i++)            {                if (IsCircularPrime(i)) //checks if circular prime number                {                    circPrimes++;                }            }            Console.WriteLine(circPrimes);        }        public static bool IsCircularPrime(int input)        {            int count = Digits(input);            int num = input;            while(IsPrime(num))            {                num = Rotate(num, count);                if (num == input)                {                    return true;                }            }            return false;           }        public static bool IsPrime(int input)        {            if (input <= 1)            {                return false;            }            if (input == 2 || input == 3)            {                return true;            }            if (input % 2 == 0 || input % 3 == 0)            {                return false;            }            for (int i = 5; i < Math.Sqrt(input); i++)             {                if (input % i == 0 || input % (i + 2) == 0)                {                    return false;                }            }            return true;        }        public static int Rotate(int num, int count)        {            int rem = num % 10;            int div = num / 10;            num = (int)((Math.Pow(10, count - 1)) * rem) + div;            return num;        }        public static int Digits(int i)        {            int digits = 0;            while (i > 0)            {                i /= 10;                digits++;            }            return digits;        }    }}``
TT3CH2/4/2023
im confused where am i going wrong here
``using System;namespace CircularPrimes{    class Program    {        static void Main(string[] args)        {            int circPrimes = 0;            for (int i = 2; i <= 1000000; i++)            {                if (IsCircularPrime(i)) //checks if circular prime number                {                    circPrimes++;                }            }            Console.WriteLine(circPrimes);        }        public static bool IsCircularPrime(int input)        {            int digits = Digits(input);            int temp = input;            while (IsPrime(temp))            {                temp = Rotate(temp, digits);                if (temp == input)                {                    return true;                }            }            return false;        }        public static bool IsPrime(int input)        {            if (input <= 1)            {                return false;            }            if (input == 2 || input == 3)            {                return true;            }            if (input % 2 == 0 || input % 3 == 0)            {                return false;            }            for (int i = 5; i < Math.Sqrt(input); i++)             {                if (input % i == 0 || input % (i + 2) == 0)                {                    return false;                }            }            return true;        }        public static int Rotate(int i, int index)        {            int digits = Digits(i);            int rotated = (int)((i % Math.Pow(10, (digits - index))) * Math.Pow(10, index) + (i / Math.Pow(10, (digits - index))));            return rotated;        }        public static int Digits(long i)        {            int digits = 0;            while (i != 0)            {                i /= 10;                ++digits;            }            return digits;        }    }}``
``using System;namespace CircularPrimes{    class Program    {        static void Main(string[] args)        {            int circPrimes = 0;            for (int i = 2; i <= 1000000; i++)            {                if (IsCircularPrime(i)) //checks if circular prime number                {                    circPrimes++;                }            }            Console.WriteLine(circPrimes);        }        public static bool IsCircularPrime(int input)        {            int digits = Digits(input);            int temp = input;            while (IsPrime(temp))            {                temp = Rotate(temp, digits);                if (temp == input)                {                    return true;                }            }            return false;        }        public static bool IsPrime(int input)        {            if (input <= 1)            {                return false;            }            if (input == 2 || input == 3)            {                return true;            }            if (input % 2 == 0 || input % 3 == 0)            {                return false;            }            for (int i = 5; i < Math.Sqrt(input); i++)             {                if (input % i == 0 || input % (i + 2) == 0)                {                    return false;                }            }            return true;        }        public static int Rotate(int i, int index)        {            int digits = Digits(i);            int rotated = (int)((i % Math.Pow(10, (digits - index))) * Math.Pow(10, index) + (i / Math.Pow(10, (digits - index))));            return rotated;        }        public static int Digits(long i)        {            int digits = 0;            while (i != 0)            {                i /= 10;                ++digits;            }            return digits;        }    }}``
HHenkypenky2/4/2023