站外题求助:一关
  • 板块学术版
  • 楼主Chalage_2010
  • 当前回复7
  • 已保存回复7
  • 发布时间2022/11/20 18:00
  • 上次更新2023/10/27 02:11:24
查看原帖
站外题求助:一关
760690
Chalage_2010楼主2022/11/20 18:00

题目描述

题面描述
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;
}

蒟蒻问一下,我的代码问题在哪里

2022/11/20 18:00
加载中...