c语言用数组解决求100以内素数

c语言用数组解决求100以内素数,第1张

把for(q=0;q<=100;q++)改成for(q=1;q<100;q++)——因为a[0]==1,肯定不是素数,且=100就越界了。

for(o=2;o<=a[q];o++)改成for(o=2;o<a[q];o++)——因为任何数都会被自身整除。

把if(p=1)改成(p==1)——if(p=1)这样写这个if如同白设,因为p=1总是为“真”。

#include<stdioh>

//求素数的方法

int isSuShu(int num){

int count = 0,i;

for(i=1;i<=num;i++){

if(num%i==0){

count++;

}

}

return count>=30:1;

}

void main(){

int i;

//因为是求100以内最大的素数,故循环的数是从100到1,得到的第一个素数就是最大的那个素数

for(i=100;i>=1;i--){

if(isSuShu(i)==1){//找到素数后直接跳出循环,这个素数就是100以内最大的素数

break;

}

}

printf("100以内最大的素数是:%d。\n",i);

}

源代码如下:

#include <stdioh>

#include <mathh>

int main()

{

int a, b, i, flag;

printf("输入两个整数: ");

scanf("%d %d", &a, &b);

printf("%d与%d之间的素数为: ", a, b);

while(a<b)

{

flag=0;

for(i=2; i<=sqrt(a); i++)

{

if(a%i==0)

{

flag=1;

break;

}

}

if(flag==0)

printf("%d ", a);

a++;

}

return 0;

}

扩展资料

一个偶数总能表示为两个素数之和的源代码如下:

#include "stdioh"

#include "mathh"

main()

{

int a,b,c,d;

scanf("%d",&a);

for(b=3;b<=a/2;b+=2)

{

for(c=2;c<=sqrt(b);c++)

if(b%c==0) break;

if(c>sqrt(b))

d=a-b;

else

break;

for(c=2;c<=sqrt(d);c++)

if(d%c==0)

break;

if(c>sqrt(d))

printf("%d=%d+%d\n",a,b,d);

}

}

for(int i=5;i<=sqrt(x);i+=6)

if(x%i==0||x%(i+2)==0)

{

printf("%d不是素数",x);

return 0;

}

printf("%d是素数",x);

return 0;

}

素数。在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数。素数在数论中有着很重要的地位。比1大但不是素数的数称为合数。1和0既非素数也非合数。

用筛选法求100以内的素数的源代码如下

#include "stdioh"

#include "stdlibh"

main()

{

int i,j;

for(i=2;i<99; i++)

{

for(j=2; j<i; j++)

{

if(i%j==0)

{

break;

}

if(j==i-1)

{

printf("%4d",i);

}

扩展资料

求100以内的巧数的源代码如下

#include<bits/stdc++h>

using namespace std;

int sum(int n)

{

return (n/10%10+n%10)+((n/10%10)(n%10));

}

int main(){

int n=100;

for(int i=10;i<=n;i++)

{

if(sum(i)==i) cout<<i<<endl;

}

return 0;

}

以我来看我觉得两个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。

以我来看我觉得两个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。

#include<stdioh>

int main()

{

int i,j;

int count=0;

for(i=2;i<100;i++)

{

for(j=2;j<=i/2;j++)

if(i%j==0)//如果i能被j整除  就不是质数  退出循环

break;

if(j>i/2)

{

count++;

printf("%-3d",i);

if(count%5==0)//当每一行有5个数时  换行

printf("\n");

}

}

return 0;

}

for(j=2;j<=i/2;j++)中的 j<=i/2是表示  从j=2开始遍历到j=i/2  看看2~i/2中能否整除i

如果都不能  说明i是质数(也就是j>i/2)

如果有1个及以上能整除i  说明i不是质数

for()

{

}

//for循环结束之后  j的值是大于i/2的  因为for循环的条件是:j<=i/2

//因此  当j>i/2时  for循环结束

if(j>i/2)

这里当且仅当2~i/2都不能整除i时   也就是j>i/2  才说明i是质数

参考资料

输出100以内的质数,用c语言如何编写?百度知道[引用时间2017-12-25]

以上就是关于c语言用数组解决求100以内素数全部的内容,包括:c语言用数组解决求100以内素数、求100以内的最大素数c语言、C语言编程:用筛选法求100之内的素数,等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10061268.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-04
下一篇2023-05-04

发表评论

登录后才能评论

评论列表(0条)

    保存