重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
int prime(int a)
专注于为中小企业提供网站制作、网站设计服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业沿河免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了成百上千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
里面
if(a(n-m)/2) return 0;
改成
if(i(n-m)/2) return 0;
其实判断素数可以有更好的算法,不过按照楼主思路 最简单的改法就这样了
如果想优化再追问
#include stdio.h
int is_prime_number(int n)
{
int i;
int result = 1;
if(n==1)
return 0;
for(i=2;in;i++)
{
if(n%i==0)
{
result = 0;
break;
}
}
return result;
}
int main()
{
int n;
printf("100以内的素数包括:\n");
for(n=1;n=100;n++)
{
if(is_prime_number(n))
{
printf("%d ",n);
}
}
printf("\n");
return 0;
}
编写一个函数实现判断一个整数是否是素数。如果输出也在函数内进行,才需要把数组传到函数中,否则只要传数组元素就可以了。
你原来的程序问题在于:
1. 缺少#include"math.h"。因为用到了sqrt();
2. if(ss(a[i])==1)语句中调用函数ss的格式与定义不符:a[i]不能传给a,且缺第二的参数。
3. 判断素数时,没有考虑对数字1的处理。
输出在主程序中进行的话,参考White_MouseYBZ网友的回答,进行修改即可。
如果打印也在函数中进行,原程序可改为:
#include"stdio.h"
#include"math.h" //增加
main()
{
int a[10],n,i;
void ss(int a[],int n);
scanf("%d",n);
for(i=0;in;i++)
scanf("%d",a[i]);
ss(a,n);//调用函数,判断并输出
/× for(i=0;in;i++) //整体删除
if(ss(a[i])==1)
printf("%d\n";a[i]); ×/
}
void ss(int a[],int n) //无需返回值,改成void
{ int k,i,j,result;
for(i=0;in;i++)
{ if(a[i]!=1) //避免1判断为素数
{ k=sqrt(a[i]);
for(j=2;j=k;j++)
if(a[i]%j==0) break;
if(jk) printf("%d ",a[i]); //输出素数
}
}
}
这是由“判断素数”的算法性质决定的。判断素数X实行的是“一票否决”,即只要除1和它自身之外的整数,有任何一个能够整除X,X就不是一个素数。
循环内部只能判断一个数,不能判断范围内的全部(除非已是最后一个数判断结束,但这种情况一般都是放到循环外部判断的)。
VC++6.0下调试可用
/*
一个素数,依次从最高位去掉一位,两位……若得到的都是素数,且各数字不为0,则称为超级素数。
*/
#include "stdio.h"
#include "math.h"
int prime(int i)
{/*判断是否为素数*/
int j;
if(i==1) return 0;
for(j=2;j=sqrt(i);j++)
if(i%j==0) return 0;
return 1;
}
int IsSuperPrime(int i)
{/*判断此数是否为超级素数函数*/
if(prime(i)==1)
{
do{
i=i/10;
if(prime(i)==0) return 0;
}while(i=10);
return 1;
}
return 0;
}
void main()
{
int spn=0,num;
long sps=0;//所有4位数的超级素数的总和
for (num=1000;num10000;num++)
if(IsSuperPrime(num))
{
printf("%6d",num);
if(++spn%4==0)printf("\n");//每输出4个超级素数输出一个换行
sps+=num;
}
printf("\nsum=%ld,Total=%d\n",sps,spn);
}
#include stdio.h
int main( int argc , char **argv)
{
int i, m;
printf("Input a number: "); /* 输入提示 */
scanf("%d", m);
if(m0)
{
printf("请重新输入正确的数:");
scanf("%d", m);
}
for(i = 2; i = sqrt(m); i++)
if(m % i == 0)
{
printf("该数不是素数");
break; /* 若m能被某个i整除,则m不是素数,输出“该数不是素数”,提前结束循环 */
}
if(i sqrt(m )/*如果循环正常结束,说明m不能被任何一个i整除,则m是素数 */
printf("该数是素数,其值为:%d \n", m);
return 0;
}