黑马程序员技术交流社区
标题:
c#怎样求一个较大整数的最小质数因子
[打印本页]
作者:
百川
时间:
2014-3-17 23:16
标题:
c#怎样求一个较大整数的最小质数因子
本帖最后由 百川 于 2014-3-18 11:58 编辑
如题。c#怎样求一个较大整数的最小质数因子。我试了一下用两个for循环,但是写的很乱
作者:
鬼鬼
时间:
2014-3-18 01:55
想了一会儿没想起来别的,只好写了个最简单的……
static int? getMinPrime(int num)
{
if (num < 2)
return null;
for (int i = 2; i <= num; ++i)
{
if (num % i == 0)
return i;
}
return num;
}
复制代码
作者:
zhl406893081
时间:
2014-3-18 02:34
本帖最后由 zhl406893081 于 2014-3-18 11:15 编辑
<DIV class=blockcode>
<BLOCKQUOTE>namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int number = Convert.ToInt32(Console.ReadLine());
bool flag = true;
if(number<2)
Console.WriteLine("你输入的数字小于2");
else if(质数(number))
Console.WriteLine("你输入了一个质数,他的小质数因子是他本身");
else if (number % 2 == 0)
Console.WriteLine("你输入了一个偶数,他的最小质数因子为2");
else
{
//质数中除了2没有其他偶数
for (int i = 3; i < number; i+=2)
{
if (flag==质数(i)&&number%i==0)
{
Console.WriteLine("你输入的数字是{0},他的最小质数因子为{1}",number,i);
break;
}
}
}
Console.ReadKey();
}
//判断n是否是质数
static bool 质数(int n)
{
//是否是质数的标志
bool flag = true;
//对n开根号
int s = (int)Math.Sqrt(n);
//n除以每个比n开根号小比1大的自然数
for (int i = 2; i <= s; i++)
{
//如果有能被整除的,则不是质数
if (n % i == 0)
{
flag = false;
return flag;
}
}
return flag;
}
}
}
复制代码
作者:
cancle
时间:
2014-3-18 09:56
本帖最后由 cancle 于 2014-3-18 10:04 编辑
额,由于卤煮说的是一个较大整数的质数因子,我就没考虑数字是小于2的,我也用2个for循环来做的。(实际上这道题用1个for循环就够了,用2个就有点画蛇添足了)
<font style="background-color: rgb(255, 255, 255);">private static int GetMin(int val)
{
int num = 0;
for (int i = 2; i < val; i++)//1不是质数,所以从2开始
{
if (i == 2)//2是最小质数
{
if (val % i == 0)
{
num = i;
break;
}
continue;
}
else
{
for (int j = 2; j < i; j++)
{
if (i % j == 0)//除尽了,说明不是质数
{
break;//跳出j的for循环,继续遍历i
}
else//除不尽,质数
{
if (val % i == 0)
{
num = i;
break;
}
}
}
break;
}
}
return num;
}</font>
复制代码
作者:
百川
时间:
2014-3-18 11:57
谢谢大家,结贴
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2