2020.7.16 T1【NOIP2015模拟10.29B组】质数(jz暑假训练day2)

这篇博客讨论了如何判断一个数是否为质数的问题,给出了NOIP2015模拟赛中的一个例子。博主首先介绍了质数的定义,并提供了输入输出样例。接着,博主分享了自己使用费马小定理得到50分的解决方案,然后指出正确的方法是通过筛选法。文章最后提到了筛选法在处理大数时的有效性,即只需要筛选到10^6内的素数即可。
摘要由CSDN通过智能技术生成

Description

定义质数为因数只含1和其本身的数,对于N组询问,试判断每个数是否为素数。

Input

第一行一个正整数N,表示有N组询问。
接下来N行,每行一个正整数M,表示询问M是否为质数。

Output

输出N行,每行一个字符串。
若是质数则输出‘Prime’,若不是质数则输出‘Not prime’。

Sample Input

5
2
10
89807289
9032482948
1000000007

Sample Output

Prime
Not prime
Not prime
Not prime
Prime
样例解释:
10=2*5
89807289=3 * 11 * 11 * 13 * 19031
9032482948=2 * 2 * 439 * 5143783

Data Constraint

20%的数据满足N≤100,1<M≤800,000。
50%的数据满足N≤1,000,1<M≤100,000,000。
100%的数据满足N≤1,000,1<M≤1,000,000,000,000。

赛时

下意识认为筛法不可取,然后用了费马小定理。。。。。。然后就50分了

正解

就是筛。。。。。。
由于x最大是10^12,所以只需要将 10^6内的素数筛出来就行了,之后与xmod就行,那么筛法就都可以啦。

代码

#include<cstdio>
#include<cstring>
using namespace std;
int n,cnt,prime[100007];
bool zs[100007
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值