题目描述
题面描述
D老师定义了3种数字:
PRM数:同时满足
1.是奇数;
2.是素数
BCL数:满足
1.如果不能被100整除,同时除以4余1;
2.能被100整除的话,除以400余1,同时除以3200不余1
MDN数:同时满足
1.与654729075互质;
2.不是PRM数
接下去D老师会给出N个数字,你需要分别计算得出这N个数中所有PRM、BCL及MDN数之和。
每个数可以被重复归类到多种数中。
输入格式
第一行一个数N,接下去N行每行一个数字
输出格式
共三行,依次为所有的PRM、BCL及MDN数之和。
样例
样例输入
5
15
26
5
28
8
样例输出
5
5
8
数据范围
N<=150000
每个数均为正整数且小于等于100000
1s, 512M
我的代码 -真的要放出来吗?
#include<bits/stdc++.h>
using namespace std;
bool a(int x)
{
if(x==1)
{
return false;
}
for(int i=2;i*i<=x;i++)
{
if(x%i==0)
{
return false;
}
}
return true;
}
int p(int x)
{
if(x%2==1 and a(x))
{
return 1;
}
return 0;
}
int b(int x)
{
if(x%100!=0)
{
if(x%4==1)
{
return 1;
}
}
else if(x%400==1 and x%3200!=1)
{
return 1;
}
return 0;
}
int m(int x)
{
if(p(x)!=1)
{
if(__gcd(x,654729075)==1)
{
return 1;
}
}
return 0;
}
int main()
{
long long np=0,nb=0,nm=0,n,x;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>x;
np=np+p(x);
nb=nb+b(x);
nm=nm+m(x);
}
printf("%lld \n%lld \n%lld",np,nb,nm);
return 0;
}
蒟蒻问一下,我的代码问题在哪里