user-0 提问: c语言中素数的判断问题

回复:
user: user-1
content: Finding prime numbers - Kenneth Haugland  Different schemas for finding prime numbers explained with code http://www.codeproject.com/Articles/429694/Finding-prime-numbers

user: user-2
content: 引用 8 楼 cfjtaishan 的回复:[quote=引用 6 楼 lzw2016 的回复:] [quote=引用 5 楼 cfjtaishan 的回复:] #include <stdio.h> #include <math.h>  int main() {     int m;     int i;     int k;      printf("输入一个整数：");     scanf("%d",&m);     k = (int)sqrt( (double)m );     for(i = 2; i <= k; i++) {         if(m%i == 0) {             break;         }     }     if(i > k)         printf("%d是素数。\n",m);     else         printf("%d不是素数。\n", m);     printf("%d",i);      return 0; } 逻辑有问题，判断m取余i为0时，就直接退出循环为0时不就是找到了一个可能是素数的m吗[/quote] 如果为0，可以确切的判定，它一定不是素数。素数是除了1和它本身能被整除[/quote]额，对，是我当时没表示清。但逻辑没问题 ，不是素数自然不就要跳出循环吗

user: user-3
content: 引用 9 楼 lzw2016 的回复:[quote=引用 8 楼 cfjtaishan 的回复:] [quote=引用 6 楼 lzw2016 的回复:] [quote=引用 5 楼 cfjtaishan 的回复:] #include <stdio.h> #include <math.h>  int main() {     int m;     int i;     int k;      printf("输入一个整数：");     scanf("%d",&m);     k = (int)sqrt( (double)m );     for(i = 2; i <= k; i++) {         if(m%i == 0) {             break;         }     }     if(i > k)         printf("%d是素数。\n",m);     else         printf("%d不是素数。\n", m);     printf("%d",i);      return 0; } 逻辑有问题，判断m取余i为0时，就直接退出循环为0时不就是找到了一个可能是素数的m吗[/quote] 如果为0，可以确切的判定，它一定不是素数。素数是除了1和它本身能被整除[/quote]额，对，是我当时没表示清。但逻辑没问题 ，不是素数自然不就要跳出循环吗[/quote] 如果不是素数，就应该break出去，如果是素数那么i自然会大于k

user: user-4
content: 引用 3 楼 destroyrap 的回复:你的if(i>k)的判断是在for循环里面，printf在for循环外面， 是printf("%d",i);在for循环外面

user: user-4
content: 你的if(i>k)的判断是在for循环里面，printf在for循环外面，

user: user-4
content: 你的if(i>k)的判断是在for循环里面

user: user-5
content: 25为什么会是素数？？？难道它不能被5整除吗？？？

user: user-3
content: 引用 6 楼 lzw2016 的回复:[quote=引用 5 楼 cfjtaishan 的回复:] #include <stdio.h> #include <math.h>  int main() {     int m;     int i;     int k;      printf("输入一个整数：");     scanf("%d",&m);     k = (int)sqrt( (double)m );     for(i = 2; i <= k; i++) {         if(m%i == 0) {             break;         }     }     if(i > k)         printf("%d是素数。\n",m);     else         printf("%d不是素数。\n", m);     printf("%d",i);      return 0; } 逻辑有问题，判断m取余i为0时，就直接退出循环为0时不就是找到了一个可能是素数的m吗[/quote] 如果为0，可以确切的判定，它一定不是素数。素数是除了1和它本身能被整除

user: user-2
content: 25不是素数，i=k=5时，for循环中i还要自增一次

user: user-2
content: 引用 5 楼 cfjtaishan 的回复:#include <stdio.h> #include <math.h>  int main() {     int m;     int i;     int k;      printf("输入一个整数：");     scanf("%d",&m);     k = (int)sqrt( (double)m );     for(i = 2; i <= k; i++) {         if(m%i == 0) {             break;         }     }     if(i > k)         printf("%d是素数。\n",m);     else         printf("%d不是素数。\n", m);     printf("%d",i);      return 0; } 逻辑有问题，判断m取余i为0时，就直接退出循环为0时不就是找到了一个可能是素数的m吗

user: user-3
content: #include <stdio.h> #include <math.h>  int main() {     int m;     int i;     int k;      printf("输入一个整数：");     scanf("%d",&m);     k = (int)sqrt( (double)m );     for(i = 2; i <= k; i++) {         if(m%i == 0) {             break;         }     }     if(i > k)         printf("%d是素数。\n",m);     else         printf("%d不是素数。\n", m);     printf("%d",i);      return 0; } 逻辑有问题，判断m取余i为0时，就直接退出循环