HDU-2138-大素数的判断板子-c语言最快判断素数

这篇具有很好参考价值的文章主要介绍了HDU-2138-大素数的判断板子-c语言最快判断素数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

HDU-2138-大素数的判断板子-c语言最快判断素数,HDU,数论,模板,算法,c++

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll fast_pow(ll x, ll y, ll m)
{
	ll res = 1;
	x %= m;
	while (y)
	{
		if (y & 1)res = (res * x) % m;
		x = (x * x) % m;
		y >>= 1;
	}
	return res;
}
bool witness(ll a, ll n)
{
	ll u = n - 1;
	int t = 0;
	while (u & 1 == 0)u = u >> 1, t++;
	ll x1, x2;
	x1 = fast_pow(a, u, n);
	for (int i = 1; i <= t; i++)
	{
		x2 = fast_pow(x1, 2, n);
		if (x2 == 1 && x1 != 1 && x1 != n - 1)return true;
		x1 = x2;
	}
	if (x1 != 1)return true;
	return false;
}
int miller_rabin(ll n, int s)
{
	if (n < 2)return 0;
	if (n == 2)return 1;
	if (n % 2 == 0)return 0;
	for (int i = 0; i < s && i < n; i++)
	{
		ll a = rand() % (n - 1) + 1;
		if (witness(a, n))return 0;
	}
	return 1;
}
int main()
{
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	int n;
	while (cin >> n)
	{
		int cnt = 0;
		for (int i = 0; i < n; i++)
		{
			ll a;
			cin >> a;
			int s = 50;
			cnt += miller_rabin(a, s);
			//cout << cnt <<"*"<< endl;
		}
		cout << cnt << endl;
	}
	return 0;
}

 文章来源地址https://www.toymoban.com/news/detail-623508.html

到了这里,关于HDU-2138-大素数的判断板子-c语言最快判断素数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C语言】判断一个数是否为素数

    目录 判断一个数是否为素数 方法1  方法2    2.1 2.2 进阶:输出区间长度内的素数 “ 素数和质数没有区别 ,素数又叫质数,质数是指在大于1的自然数中,除了1和它本身以外,不能被其他自然数整除的数。比1大但不是素数的数称为合数,1和0既非素数也非合数。” 所谓素数

    2024年02月04日
    浏览(54)
  • (c语言)素数判断的四种方法

    2024年02月04日
    浏览(29)
  • 【C语言】C语言实现一个函数 判断是否是素数

           欢迎来到南方有乔木的博客!!! 博主主页: 点击点击!戳一戳!! 博主QQ: 1636758318 博主简介: 一名在校大学生,正在努力学习Java语言编程。 穷且意坚,不坠青云之志 ,希望能在编程的世界里找到属于自己的光。 跪谢帅气or美丽的朋友们能够帮我点赞! 请对文中

    2024年02月04日
    浏览(72)
  • C语言中判断素数的几种方法

    作为C的初学者们希望大家看看这几种判断素数的方法 既然进来了就看完把 题目要求: 判断n是否为素数。 首先我们讲一下素数的判定:素数就是只能被1或者本身整除的数,这就延伸出了几种不同的判定方法。 方法一:因为判断素数相当于就是判断这个数能不能整除2-这个数

    2024年02月11日
    浏览(35)
  • C语言素数(质数)判断的三种方法

    本文介绍了判断素数的3种方法,从素数的概念分析,确定找到素数的几个必要条件,设计思路,并将代码进行优化。此外,还使用自定义函数的形式将同样的思路进行实现。 素数,就是仅能被自身和1整除的数字。 首先我们可以提取出判断素数的三个基本条件: 素数是整数

    2024年02月04日
    浏览(33)
  • 超级详细用C语言判断一个数是否是素数

    先上代码: #include stdio.h int main() {         int n,i;     printf(\\\"请输入一个数: \\\");     scanf(\\\"%d\\\",n);     for(i=2;in;i++){         if(n%i==0){             break;         }     }     if(n==i){         printf(\\\"是素数\\\");     }     else         printf(\\\"不是素数\\\"); } 理解: 素数

    2024年02月08日
    浏览(80)
  • C语言--输入一个数判断是否为素数(多种方法)

     需要解决这个问题,首先我们要明白 --------什么是素数? (质数)素数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。 举个例子:4  可以 由2*2=4  和1*4 得到,不符合素数的条件,所以不是素数。                   5  只能由1*5 得到,符合素数的

    2024年01月25日
    浏览(40)
  • 初等数论——素数,逆元,EXGCD有关

    设整数 (pne 0,pm 1) 。如果 (p) 除了平凡约数以外没有其他约数,那么称 (p) 为素数(不可约数)。 若整数 (ane 0,pm 1) 且 (a) 不是素数,则称 (a) 为合数。 ——————OI Wiki 如何判断一个数 (x) 是不是质数? 很显然我们可以暴力的枚举 (1) 到 (sqrt{x}) 来看是否整除

    2024年02月05日
    浏览(26)
  • C语言:判断一个数是否为素数(3种方法,含注释)

    首先要先明白素数的定义:除了1和本身之外,没有其他的因数的数,即不能被其他数整除。 同时要注意,1不是素数。 以下为判断素数的3个代码: 1.要注意给m赋初值是不能为1,因为1是任何数的因数,可以被任何数整除。若初值为1,则第一步就结束循环,所有的数输出结果

    2024年02月13日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包