【九度OJ】题目1047:素数判定 解题报告

标签(空格分隔): 九度OJ


原题地址:http://ac.jobdu.com/problem.php?pid=1047

题目描述:

给定一个数n,要求判断其是否为素数(0,1,负数都是非素数)。

输入:

测试数据有多组,每组输入一个数n。

输出:

对于每组输入,若是素数则输出yes,否则输入no。

样例输入:

13

样例输出:

yes

Ways

用C++还是不能一遍A.

这个题是在太简单,大一经常做。就是从2到sqrt(2)枚举,看能不能整除,如果能整除就不是素数。

注意在判断n<=1的时候不能写break;如果写了程序也就运行停止了!

另外有个技巧,就是循环判断,宁愿多算一个数也不能出现错误。

#include <stdio.h>
#include <math.h> int main() {
int n;
while (scanf("%d", &n) != EOF) {
if (n <= 1) {
printf("no\n");
//break;//不能写
} else {
bool isPrime = true;
for (int i = 2; i <= (int) sqrt(n) + 1; i++) {
if (n % i == 0) {
isPrime = false;//被整除不是素数
break;
}
}
if (isPrime) {
printf("yes\n");
} else {
printf("no\n");
}
} }
return 0;
}

另外,是否想到BigInteger类!

简直是神器好么!直接可以判断一个数是否为素数。

这里要说明,这个判断对合数的判断是绝对正确的,对素数的判断不绝对正确,只是有很大可能性进行确认。

isProbablePrime(num)里面的参数代表判断素数的准确率为1/(2^num),num越大代表判断准确度越高,可以看出当num=10时这个题已经能AC了。

可能有人问为什么会出现这种不确定性的结果,原因是当一个数非常大的时候,判断其是否为素数的老方法为O(sqrt(n)),这个复杂度很高的,当一个数极大时,这个运算可能需要一天甚至更久才能给出结果。

所以,史上最伟大的业余数学家 费马 给出了近似判定公式,可以极大优化计算复杂度,但是缺点是有可能出现判错的结果。

具体见文章:聊聊如何检测素数

import java.util.*;
import java.math.*; public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext()){
if (scanner.nextBigInteger().isProbablePrime(10)) {
System.out.println("yes");
} else {
System.out.println("no");
}
}
}
}

Date

2017 年 3 月 7 日

【九度OJ】题目1047:素数判定 解题报告的更多相关文章

  1. 九度oj 题目1047:素数判定

    题目1047:素数判定 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:12466 解决:5644 题目描述: 给定一个数n,要求判断其是否为素数(0,1,负数都是非素数). 输入: 测试数 ...

  2. 九度OJ 题目1384:二维数组中的查找

    /********************************* * 日期:2013-10-11 * 作者:SJF0115 * 题号: 九度OJ 题目1384:二维数组中的查找 * 来源:http ...

  3. hdu 1284 关于钱币兑换的一系列问题 九度oj 题目1408:吃豆机器人

    钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  4. 九度oj题目&amp;吉大考研11年机试题全解

    九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码).    http://ac.jobdu.com/problem.php?pid=11 ...

  5. 九度oj 题目1007:奥运排序问题

    九度oj 题目1007:奥运排序问题   恢复 题目描述: 按要求,给国家进行排名. 输入:                        有多组数据. 第一行给出国家数N,要求排名的国家数M,国家号 ...

  6. 九度oj 题目1087:约数的个数

    题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...

  7. 九度OJ题目1105:字符串的反码

    tips:scanf,cin输入字符串遇到空格就停止,所以想输入一行字符并保留最后的"\0"还是用gets()函数比较好,九度OJ真操蛋,true?没有这个关键字,还是用1吧,还是 ...

  8. 九度oj题目1009:二叉搜索树

    题目描述: 判断两序列是否为同一二叉搜索树序列 输入:                        开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接 ...

  9. 九度oj题目1002:Grading

    //不是说C语言就是C++的子集么,为毛printf在九度OJ上不能通过编译,abs还不支持参数为整型的abs()重载 //C++比较正确的做法是#include<cmath.h>,cou ...

随机推荐

  1. C语言 文本字符串存入二维数组

    字符串存入数组 文本内容: line1_1 line1_2line2_1 line2_2line3_1 line3_2line4_1 line4_2line5_1 line5_2line6_1 lin ...

  2. Django创建多对多表关系的三种方式

    方式一:全自动(不推荐) 优点:django orm会自动创建第三张表 缺点:只会创建两个表的关系字段,不会再额外添加字段,可扩展性差 class Book(models.Model): # ... ...

  3. 8.Maximum Depth of Binary Tree

    /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode ...

  4. 11.13python第一周周末练习

    2.请输出你的基本个人信息 3.结合逻辑判断,写一个不同学生分数,输出良好,优秀,分数不及格 循环输出 字符串的替换. 以什么开头startwith 以什么结尾endwith 列表转为字符串 字符串转 ...

  5. 【题解】洛谷P1001 A+B Problem

    第一篇博客,献给2020年的残夏. 静听8月的热情与安宁,在竞赛中的时光如白驹过隙. 也不惧未知的风雨,努力向着既往的通途. 题目地址 https://www.luogu.com.cn/problem ...

  6. 一个简单的BypassUAC编写

    什么是UAC? UAC是微软为提高系统安全而在Windows Vista中引入的新技术,它要求用户在执行可能会影响计算机运行的操作或执行更改影响其他用户的设置的操作之前,提供权限或管理员‌密码.通过在 ...

  7. LeetCode一维数组的动态和

    一维数组的动态和 题目描述 给你一个数组 nums.数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]...nums[i]). 请返回 nums 的动态和. 示例 1: ...

  8. CAS你知道吗

    1.比较并交换 CASDemo /** * CAS => compareAndSet * 比较并交换 */ public class CASDemo { public static void m ...

  9. GO 总章

    GO 学习资源 go 代理 GO 语言结构 GO 数字运算 GO 时间处理 GO 定时器 GO 异常处理 go recover让崩溃的程序继续执行 GO Exit Fatal panic GO 通过进 ...

  10. list通过比较器进行排序

    Collections.sort(dataList,new Comparator<BaseTransitData>(){            public int compare(Bas ...