这是我的代码,它只能输出素数。
#include <stdio.h>
int prime(int n){
int j;
for (j=2;j<=n/2;j++){
if((n%j)==0){
return 0;
}
else{
return 1;
}
}
}
void main(){
int i,p;
for (i=2;i<=100;i++){
p=prime(i);
if(p==1){
printf("%d \n",i);
}
}
}
结果是2,3,7,9,11,13,15 ....
不是2,3,5,7,11,13 ....
我做错了什么?
答案 0 :(得分:5)
你可能想要:
int prime(int n){
int j;
for (j=2;j<=n/2;j++)
if((n%j)==0)
return 0;
return 1;
}
答案 1 :(得分:2)
Prime数字是只能被两个数字整除的数字。例如2,3,5,7,11等。
int main()
{
int i,j,n=0;
for(i=2;i<=100;i++)
{
for(j=1;j<=i;j++)
{
if(i%j==0)
{
n++;
}
}
if(n==2)
printf("%d\n",i);
n=0;
}
getch();
}
答案 2 :(得分:1)
试试这个:
int prime(int n){
int j;
int isPrime = 1;
for (j=2;j<=n/2;j++){
if((n%j)==0){
isPrime = 0;
break;
}
}
return isPrime;
}
答案 3 :(得分:0)
如果你想找出一个给定数字的Prime数字(在你的情况下是2..100),建立一个素数表会加快这个过程:
注意:输入是顺序的,以帮助构建素数表非常重要。
#include <stdio.h>
#include <math.h>
/* Building a prime table for fast look up
* NOTE : Numbers should be input from 2 to n in a sequential pattern to help build prime table; */
# define PRIME_TAB_MAX 200
int prime_specific(int num)
{
static int primeTab[PRIME_TAB_MAX] = { 0, };
static int primeCount = 0;
int check_limit ;
unsigned int idx;
if (num < 2)
return 0;
if (primeCount > 0) {
check_limit = (int)sqrt(num);
for (idx = 0; idx < primeCount && primeTab[idx] <= check_limit; idx++) {
if (0 == (num % primeTab[idx])) {
return 0;
}
}
}
else {
for (idx = 2; idx <= num / 2; idx++)
if (0 == (num % idx))
return 0;
}
if (primeCount < PRIME_TAB_MAX) {
primeTab[primeCount++] = num;
return 1;
}
else {
fprintf(stderr, "\nERROR: Prime Table is full");
return (-1); //Internal error
}
}
int main(void)
{
unsigned int idx;
int status ;
for (idx = 2; idx <= 1000; idx++) {
status = prime_specific(idx);
switch (status)
{
case 1:
fprintf(stderr, "%d\n", idx);
break;
case 0:
//Do nothing
break;
default:
fprintf(stderr, "\nERROR:Internal Error");
return (-1);
}
}
return 0;
}
答案 4 :(得分:-1)
代码:
#include <stdio.h>
int main ()
{
/* local variable definition */
int i, j;
for(i=2; i<100; i++)
{
for(j=2; j <= (i/j); j++)
if(!(i%j)) break; // if factor found, not prime
if(j > (i/j)) printf("%d is prime\n", i);
}
return 0;
}