用筛选法求1到n(1<n<10000000)内的素数的个数,有更快的运算方法更好

用筛选法求1到n(1<n<10000000)内的素数的个数,有更快的运算方法更好,第1张

#include<vector>
#include<iostream>
int main()
{
    int n;
    std::cin>>n;
    std::vector<int>num;
    numpush_back(2);
    for(int i = 3; i < n; i++)
    {
        int flag = 1;
        for(int j = 0; j < numsize(); j++)
        {
            if(i%num[j] == 0)
            {
                flag = 0;
                break;
            }
        }
        if(flag)
            numpush_back(n);
    }
    std::cout<<numsize();
    return 0;
}

筛选法求最大公约数:
求48和60的最大因数
1、先写出较大数的因数,60的因数有1,2, 3,5,6,10,12,15,20,30从大到小找60的因数中谁是48的因数就是它们的最大公因数,12是48的因数。所以,48和60的最大公因数是12。
同理可得24和36的最大公因数也是12。

我看出两处逻辑不当的地方
第一个输出部分,这个简单,n没有改变,为什么n==10的时候要输出换行呢?
该为
void shuchu(void) //这里void不能丢
{
for(i=2,n=0;i<=100;i++), //你明知道从2开始,为什么要多一次循环
{
if(a[i]!=0)
{
printf("%5d",a[i]);
n++;
}
if(n%10==0)
printf("\n");
}
printf("\n");
}
判断筛选的过程,i从2~7就够了,也就是判断2 3 5 7这几个数
void shaixuan(void)
{
for(i=2;i<=7;++i)
{
if(a[i]==0) //如果a[i]=0了直接continue
contunue;
for(j=i+1;j<=100;j++) //这个j从i+1开始就好了
{
if(a[j]==0)
continue;
if(a[j]%a[i]==0)
a[j]=0;
}
}
}

#include <stdioh>
main()
{
int n,i,t,m;
do{
printf("请输入一个大于2的正整数");
scanf("%d",&n);
}while(n<2);
for (i=2; i<=n; i++){
m=0;
for(t=2; t<i; t++)
if(i%t==0)//若不能被任一数整除则为素~
m++;
if (m==0)
printf("%d为素数\n",i);
}

}


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

原文地址: http://outofmemory.cn/yw/13159121.html

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

发表评论

登录后才能评论

评论列表(0条)

保存