C语言 素数 函数调用

#include<stdio.h>
#include<math.h>
int main()
int newfunction()
{int x,i;
double k;
scanf("%d",&x);
k=sqrt(x);
for(i=2;i<=k;i++)
if(x%i==0) break;
if(i>k)
printf("%d 是素数\n",x);
else
printf("%d 不是素数\n",x);
return 1;
}

int newfunction()
{
int a;
printf("input a number");
scanf("%d",&a);
newfunction(a);

}
我的目的就是想自己定义一个函数,然后使用这个函数,可是不是很懂,好多错误,不想用网上那个,看不懂

  素数:
  质数又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数(质数)整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数。
  根据算术基本定理,每一个比1大的整数,要么本身是一个质数,要么可以写成一系列质数的乘积;而且如果不考虑这些质数在乘积中的顺序,那么写出来的形式是唯一的。最小的质数是2。
  基本判断思路:
  在一般领域,对正整数n,如果用2到

  之间的所有整数去除,均无法整除,则n为质数。
  Python 代码:
  def is_prime(n):
  list_num = []
  for i in range(2, n):
  for num in range(2, int(sqrt(n))+1):
  if i % num == 0 and i != num:
  break
  elif i % num != 0 and num == (int(sqrt(n))):
  list_num.append(i)
  return list_num
  

  Java代码:
  public static boolean isPrime(long n) {
  if (n <= 3) {
  return n > 1;
  }
  if (n % 2 == 0 || n % 3 == 0) {
  return false;
  }
  
  for (int i = 5; i * i <= n; i += 6) {
  if (n % i == 0 || n % (i + 2) == 0) {
  return false;
  }
  }
  return true;
  }
  

  Php代码:
  function isPrime($n) {//TurkHackTeam AVP production
  if ($n <= 3) {
  return $n > 1;
  } else if ($n % 2 === 0 || $n % 3 === 0) {
  return false;
  } else {
  for ($i = 5; $i * $i <= $n; $i += 6) {
  if ($n % $i === 0 || $n % ($i + 2) === 0) {
  return false;
  }
  }
  return true;
  }
  }
  

  C/C++代码:
  bool isPrime(unsigned long n) {
  if (n <= 3) {
  return n > 1;
  } else if (n % 2 == 0 || n % 3 == 0) {
  return false;
  } else {
  for (unsigned short i = 5; i * i <= n; i += 6) {
  if (n % i == 0 || n % (i + 2) == 0) {
  return false;
  }
  }
  return true;
  }
  }
  
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-01-14
详细分析如下,不懂可以追问

这个地方的处理逻辑有问题,这里是判断flag等于1就打印i的值,可是你i的值用什么来保存?也就是说,根据上面的循环判断的时候,i会一直自增到b,那么如果b是素数的话,flag的值就为1,如果不是素数的话,flag的值等于0 了。所以说,你输入的b的值如果不是素数,程序根本就不会进下面的if一句了。
建议定义一个数组b,将当i为素数时的值保存到b数组中去,再定义一个变量count1将保存素数的个数,然后通过循环将素数打印出来,循环的条件是i<count1。这样就不会有问题了。

奥,对了,还有一个问题,你那个第二层循环为什么是n<i/2? 这样会有一个问题,假设到i=10时,你这里只能判断i不能被小于的数整除,不能保持i十分能被6整除呢?
if (flag==1){
printf("(%d)",i);
count++;
if (count%5==0);
printf("\n");
return 0;
}
第2个回答  2013-11-22
#include<stdio.h>
#include<math.h>
int main()
{  // <-- { 前移至此
int newfunction(); // <-- 末尾加个分号
int x,i;
double k;
scanf("%d",&x);
k=sqrt(x);
for(i=2;i<=k;i++)
if(x%i==0) break;
if(i>k) 
printf("%d 是素数\n",x);
else 
printf("%d 不是素数\n",x);
return 1;
}

int newfunction()
{
int a;
printf("input a number");
scanf("%d",&a);
newfunction(a);

}

第3个回答  推荐于2018-02-12
#include<stdio.h>
#include<math.h>
int newfunction2(int x);//用来判断的函数
int newfunction();//用来输入的函数
int
main ()
{
  newfunction ();//调用了输入函数
  
  return 0;
}
int
newfunction ()
{
  int a;
  printf ("input a number\n");
  scanf ("%d", &a);
  
  return newfunction2(a);//调用了判断函数
}
int
newfunction2 (int x)
{
  int i, k;
  k = sqrt (x);
  for (i = 2; i <= k; i++)
    if (x % i == 0)
      break;
  if (i > k)
    printf ("%d 是素数\n", x);
  else
    printf ("%d 不是素数\n", x);
  return 1;
}

本回答被提问者和网友采纳
第4个回答  2013-11-22

是否想在newfunction中判断是否素数?


下面是代码:

#include<stdio.h>
#include<math.h>

void newfunction(int a)
{ int k,i;
k=sqrt(a);
for(i=2;i<=k;i++)
if(a%i==0) break;
if(i>k) 
printf("%d 是素数\n",a);
else 
printf("%d 不是素数\n",a);
return;
}

int main()
{
  int a;
printf("input a number:");
scanf("%d",&a);
newfunction(a);
exit(0);
}