❔ circular primes
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?
5 Replies
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;
}
}
}
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;
}
}
}
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;
}
}
}
your rotate method
Looks like nothing has happened here. I will mark this as stale and this post will be archived until there is new activity.