一个数是不是质数,就是判断一个数除了1和它本身还有没有其他的约数,如果有则是合数,否则是质数。其实本质都是求公约数。
求公约数是什么思路呢,就是找比它小的数不断尝试,能被整除则是其约数,否则继续尝试,直到确定所有数都找遍。本着这个思路,求公约数的算法如下:
public static List<long> GetGYS(long num) { if(num==1) return new List<long>(){1}; var list=new List<long>(){1,num}; long temp=2,end=num/temp; while(temp<end){ if(num%temp==0) list.Add(temp); temp++; end=num/temp; } return list; }
后来想了想,如果单纯求是否为质数,其实还可以更快速一些,把步进调整为2,如下:
public static bool CheckedIsZS(long num) { if(num<=3) return true; if(num%2==0) return false; long temp=3,end=num/temp; while(temp<end){ if(num%temp==0) return false temp+=2; end=num/temp; } return true; }