制杖题
題目描述
求不大于 m 的、 質因數集與給定質數集有交集的自然數之和。
輸入格式
第一行二個整數 n,m。
第二行 n 個整數,表示質數集內的元素 p[i]。
輸出格式
一個整數,表示答案,對 376544743 取模。
輸入輸出樣例
輸入 #1復制 2 15 3 5 輸出 #1復制 60說明/提示
樣例解釋:所有符合條件的數為 3,5,6,9,10,12,15 其和為 60。
··· 測試點編號 規模
1 2 3 n*m<=10^7 4 5 n<=2,m<=10^9 6 7 n<=20,m<=10^8 8 9 10 n<=20,m<=10^9 ···單個容斥+等差數列求和會TLE三個點
而且為什么1算質數???
#include<cstdio> #include<iostream> #pragma GCC optimize(3) #pragma GCC optimize(2) using namespace std;inline int read() {int x=0;char ch=getchar();char c=ch;while(ch>'9'||ch<'0')c=ch,ch=getchar();while(ch<='9'&&ch>= '0')x=x*10+ch-'0',ch=getchar();if(c=='-')x=x*-1;return x; } void put(long long f) {if(f<0)putchar('-'),f=-f;int top=0,q[20];while(f)q[++top]=f%10,f/=10;top=max(top,1);while(top--)putchar('0'+q[top+1]); }long int n,m,i,j,a[505];long long ans=0;int tot=376544743;bool b[1000000005];int main(){n=read();m=read();for(i=1;i<=n;i++){a[i]=read();if(a[i]==1){for(j=1;j<=m;j++){ans+=i;}put(ans%tot);;return 0;}}for(i=1;i<=n;i++){if(a[i]<=m){for(j=1;j*a[i]<=m;j++){if(b[a[i]*j]==false){b[a[i]*j]=true;}}}}for(i=1;i<=m;i++){if(b[i]==true){ans+=i;}}put(ans%tot);return 0; }
?
轉載于:https://www.cnblogs.com/hrj1/p/11143216.html
總結
- 上一篇: 消息称台积电3nm制程工艺目前良品率在7
- 下一篇: RAC环境下创建本地数据文件的解决方法