日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

质数乘积(大数乘法+埃氏筛法)

發布時間:2023/12/8 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 质数乘积(大数乘法+埃氏筛法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

質數乘積

題目描述
TWQ每天瘋狂的刷題,今天又刷到一道水題,于是趕緊來拿一血吧,給你一個正整數n,求小于n的數中所有質數的乘積,輸入有多組測試用例,0為結束標志,所有質數的乘積初始值為0。

輸入
正整數n(n<=10000)

輸出
小于n的質數的乘積。

樣例輸入
5
0

樣例輸出
6

提示
大數乘法

#include<stdio.h> #include<math.h> int a[1000000]; int main() {int i,j,f=0,k,l1,l2,x,y,z,n,l,b[10010];//標記10000以內的素數for(i=0;i<=10000;i++)b[i]=1;//先把所有數標位1for(i=2;i<=100;i++)//前100的質數就能篩出來所有質數了{if(b[i])//如果b[i]==1則就是素數{for(j=i+i;j<=10000;j=j+i)//埃氏篩法,所有是i的倍數全部不是素數,標記為0b[j]=0;//標記所有不是質數的數}}while(scanf("%d",&n)!=EOF){if(n<=0)break;for(i=1;i<1000000;i++)a[i]=0;//把數組初始化為0方便后面計算因為0*任何數都是0a[0]=1;//大數乘法首位為1去乘每一位if(n==1||n==2)//特判printf("0\n");else{for(i=2;i<n;i++)//遍歷n以內的素數{if(b[i])//i是素數{y=0;for(j=0;j<7000;j++)//遍歷7000簡單粗暴{x=a[j]*i+y;//每一位*ia[j]=x%10;//保留個位存入數組ay=x/10;//計算進位}}}for(i=5000;i>=0;i--)//首先遍歷找出第一個不為0的數即是最高位if(a[i]!=0)break;for(j=i;j>=0;j--)//循環遍歷printf("%d",a[j]);printf("\n");}}return 0; }

總結

以上是生活随笔為你收集整理的质数乘积(大数乘法+埃氏筛法)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。