C语言中的素数优化
我试着打印素数;200万到100万。但控制台上没有打印任何内容。你能查一下我的密码吗?我怎样才能使这段代码更优化 这是我的密码:C语言中的素数优化,c,primes,C,Primes,我试着打印素数;200万到100万。但控制台上没有打印任何内容。你能查一下我的密码吗?我怎样才能使这段代码更优化 这是我的密码: #include <stdio.h> #include <math.h> main() { int num, sr, num2; for (num = 2; num <= 1000000; num++) { sr = (int) sqrt(num); for (num2 = 2; sr % num2
#include <stdio.h>
#include <math.h>
main()
{
int num, sr, num2;
for (num = 2; num <= 1000000; num++) {
sr = (int) sqrt(num);
for (num2 = 2; sr % num2 != 0; num2++) {
if (sr == num2) {
printf("%d\n", sr);
}
}
}
}
#包括
#包括
main()
{
int num,sr,num2;
对于(num=2;num它编译了吗
第4行:main()
另一件事:sr=1。1模任何数都是1
最后,sr永远不会等于num2,因为sr是1,num2是2或更大,所以它永远不会打印任何东西
这将使您进入一个不包含任何内容的无限循环
#include <stdio.h>
#include <math.h>
int main(){
int num, sr, num2;
int isPrime = 1; // this is a check parameter; isPrime = 0 if number is not prime.
for(num=2; num<=100; num++){
sr = (int) sqrt(num);
for(num2=2; num2 <= sr; num2++){
//num2 <== sr to stop the innner loop
if(num%num2 == 0){
//printf("=========== %d|%d\n", num,num2); // uncomment this to see if a number is divisable
isPrime = 0; // this number is not prime, cos num can be divided by num2
break;
}
}
if(isPrime){
printf("Prime number is %d\n", num);
isPrime = 1; // reset the check parameter
}else{
isPrime = 1; // reset the check parameter
}
}
return 0;
}
#包括
int main(){
int num,sr,num2;
int isPrime=1;//这是一个检查参数;如果数字不是素数,isPrime=0。
对于(num=2;num,如果您希望对其进行优化,则应使用类似于eratosthenes筛的工具。在您的数据范围内操作很容易。您可以在此处阅读更多信息:
您可以使用的一个优化是3以上的所有素数都是6n+1或6n-1的形式,并且如果一个数字可以被素数整除,它就不是素数。下面是一些使用该事实的代码:
#include <stdio.h>
#include <math.h>
int is_prime(long num)
{
int k = 1, a = 0, b = 0;
long sr;
switch(num)
{
case 1: return 0;
case 2: return 1;
case 3: return 1;
case 4: return 0;
case 5: return 1;
case 6: return 0;
case 7: return 1;
}
if (num % 2 == 0) return 0;
if (num % 3 == 0) return 0;
sr = (int) sqrt(num);
while (b < sr) {
a = (6 * k) - 1;
b = (6 * k) + 1;
if (num % a == 0)
return 0;
if (num % b == 0)
return 0;
k += 1;
}
return 1;
}
void main(void)
{
int j;
for (j = 0; j<100; j++){
if (is_prime(j))
printf("%d is a prime\n", j);
}
}
#包括
#包括
int是_素数(long num)
{
int k=1,a=0,b=0;
长sr;
开关(num)
{
案例1:返回0;
案例2:返回1;
案例3:返回1;
案例4:返回0;
案例5:返回1;
案例6:返回0;
案例7:返回1;
}
如果(num%2==0)返回0;
如果(num%3==0)返回0;
sr=(int)sqrt(num);
while(b 对于(j=0;js)在调试器中遍历代码,错误应该立即显现出来。提示:如果sr==1
和num2>=2
,那么sr%num2
将是什么?您可以通过注意所有超过3的素数都是6k+1或6k-1的形式来优化它。