A. c语言素数
#include <stdio.h>
int main(){
int a=0; // 素数的个数
int num=0; // 输入的整数
printf("输入一个整数:");
scanf("%d",&num);
for(int i=2;i<num;i++){
if(num%i==0){
a++; // 素数个数加1
}
}
if(a==0){
printf("%d是素数。 ", num);
}else{
printf("%d不是素数。 ", num);
}
return 0;
}
输入一个数,自动进行判断
B. c语言求100以内的质数
以我来看我觉得两个for循环都有问题。
首先第一个for循环应该错了。应该是i < 100。因为是求100以内的,所以要循环到100。
这个程序就是利用for循环让i从2遍历到99.然后利用j找出了1和本身之外i的因数。
那么第二个for循环问题就来了,我们寻找i的因数的时候,并不需要从2一直找到i本身,只要找到i的一半就可以停止了。举个简单例子,比如我们要找98的因数,那么我们只需要找到98÷2 = 49就行了,因为49之后的数字是肯定不能整除98的。同理大于i/2之后的数字是肯定不能够整除i的。所以第二个for的条件应该是j <= (i/2)而不是j。下面就简单了。如果j是i的因数,那么i%j=0. 就直接continue(顺便提一句这里是不能用break的,因为break是直接跳出了for循环,相当于直接结束了整个for循环,而此时还没有遍历到100的,应该用continue,continue就是结束当前循环并且执行i++继续下一轮循环)继续循环而不用执行print语句(这个时候代表i不是质数,因为除了1和它本身还有j这个因数。)。同理,如果从2到i/2都没有i的因数,那么就说明i没有其他因数,也就是质数了,所以print输出i。
另外补充一下:
i/j是求i除以j的商,比如11 / 3 = 3; 6 / 3 = 2
i%j是求i除以j的余,比如11 % 3 = 2; 6 % 3 = 0。
C. c语言 质数
把1<N<1000;去掉,scanf("%d",&N);少了&;你的质数判断方法也有问题
D. C语言中的质数
数学的概念中,素数就是只能被1和它本身所整除的整数。但是有一个例外,就是1不属于素数。所以你在输入一个整数并加以判断的时候就需要考虑这种情况了。如下即可:
while(scanf("%lu", &num) == 1 && num != 1)
这里用到了while循环来判断输入的数值并加以判断,如果输入格式正确的话会返回一个1并将输入的数值存入num这个变量中,然后再判断num的值是否为1。
在这里有一条很好用的规则用于素数的判断:测试的数只需要界于2到num的平方根之间的所有数,看它们是否可以整除num。如果可以整除,说明输入的数不是素数;反之,说明输入的数是素数。
到这里,就会有人说平方根怎么求,其实这个很好解决。你完全可以像下面这样描述判断条件:
- for(div = 2; (div * div) <= num;div++){ if(num % div == 0){ if((div * div) != num){
- printf("%lu is divisible by %lu and %lu. ", num, div, num / div);
- }else {
- printf("%lu is divisible by %lu. ", num, div);
- }
- }
- }
在这里,在if条件语句里面还嵌套了一个if条件语句,用来判断两个约数是否是一样的,比如144,约数是12和12,这时候就只需要打印一个约数即可。
E. c语言求质数
有救!有救!
你的思路挺好的,就是编程的时候思路不清晰,没有周全考虑。
这是改后的代码
#include
"stdio.h"
#include
"conio.h"
main()
{
int
m,n,i,num;
int
p[100];
long
s;
s=2;
m=1;
n=1;
num=1;
p[1]=2
;
for
(;num<100;num++)/*这里的分号应该是你笔误吧O(∩_∩)O*/
{for
(i=1,n=2;;)
/*这里n=2而非m估计也是你笔误?*/
{m=p[i]
;
if
(m>s/2)
break;
else
if(m*n<s)
n++;
else
if(m*n==s)
{s++;i=1;n=2;}/*这里*/
else
if(m*n>s)
{i++;n=2;}/*和这里,仔细想一想,当尝试一个新的数字或尝试一个新的质数时,是不是要把计数变量初始化?*/
/*编程的时候不要想当然,要通盘考虑,每个变量是否都做了妥善的处理*/
}
p[num]=s;/*你要用质数表,怎么能不记录质数表呢^o^*/
printf
("p%d=%ld\n",num,s);
s++;
}
getch();
}
你的程序运用质数表这点很好,但是你的程序还没发挥到最高效率。里边有一些无用的判断和赋值,而且没有利用mod运算,使程序既复杂又低效。
我觉得还是用标准的求质数算法比较好,到处都有,不再说了。
F. C语言素数
是说 有个数, 不能被从2到 他的根的数整除,则这个数是素数
G. C语言计算质数
#include<stdio.h>
staticcharm[8000000];
staticintprime[500000];
#defineMAX_N7368787
voidset(void)
{
inti,j;
for(i=2;i<=MAX_N;i++)
{
if(m[i]==1)continue;
for(j=i+i;j<=MAX_N;j+=i)
m[j]=1;
}
for(i=j=0;i<=MAX_N;i++)
if(m[i]==0)prime[j++]=i;
}
intmain()
{
intm,n,;
while(~scanf("%d%d",&m,&n))
{
for(i=m;i<=n;i++)
{
printf("%d",prime[i-1]);
if(i==n||(i-m)%10==9)putchar(' ');
elseputchar('');
}
}
return0;
}
H. C语言求质数
红框里的代码,加上那个i++的for循环,其逻辑是:
从2开始,遍历所有小于n的整数,
只要存在一个整数可以被n整除(即余数为0),则可判断n为合数.
若从2到n-1范围内,不存在可整除n的数,则判断n为质数.
还有 for(int .......)这种定义变量的写法,要C99才支持,现在很多编译器默认C89标准,或者不支持C99标准,这样写容易出错.
第一个for循环里面,直接把n=0,1,2的情况跳过了.既然这样,变量n直接把初值赋为3不就好了,赋值0干嘛.
第二个for循环里面,判断到i<sqrt(n)就可以了,还有更简单的求质数算法,感兴趣可以网络.
I. C语言如何实现质数输出
通过除以小于被除数的所有数
a%d==0 则count‘++;
判断如果count==0,printf(“%d”,a);
J. c语言求素数的算法
根据素数的性质,代码设计如下:
设计一:判断n是否能被1~n-1整除,不能整除为素数
#include<stdio.h>
int main()
{
int i, n;
scanf("%d", &n);
for (i = 2; i < n ; i++)
{
if (n%i == 0)
break;
}
if (i < n) printf("This is not a prime.");
else printf("This is a prime.");
return 0;
}
设计二:判断n是否能被2~√n间的整数整除,不能整除为素数
#include<stdio.h>
#include<math.h>
int main()
{
int n,i;
double k;
scanf("%d", &n);
k = sqrt(n);
for (i = 2; i <= k;i++)
{
if (n%i == 0) break;
}
if (i <=k) printf("This is not a prime.");
else printf("This is a prime");
return 0;
}
(10)c语言质数扩展阅读:
1.素数的定义是只能被1和他本身整除,1不是素数.因此要判断一个数是否为素数.就要判断它能不能被比他小的所有素数整除,这是一个算法.(写到算法时,我只能写出用它除以比他小的所有数,造成运算速度低下)
2.如果一个质数大于根号n,而n可以除尽它,那么n必然也可以除尽一个更小的质数。由此可以得到一个法2较快的素数判断算法