234. countprime

2024-05-09 23:58
文章标签 234 countprime

本文主要是介绍234. countprime,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[cpp] view plain copy  print?

int countPrimes(int n) {  

    int i =0, count=0;  

  1.     for (i=1; i<n; i++)  
  2.     {  
  3.         if (isprime(i))  
  4.         {  
  5.             count++;  
  6.             prim_vec.push_back(i);  
  7.         }  
  8.     }  
  9.     return count;  
  10.    }  


判断是否是素数,最简单的代码如下,但这样提交时会超时。

 

 

[cpp] view plain copy  print?

  1. bool isprime(int n)  
  2. {  
  3.     if (n < 2)  
  4.         return false;  
  5.     if (n ==2 )  
  6.         return true;  
  7.     int tmp = sqrt(n);  
  8.     for (int i=1; i<tmp; i++)  
  9.     {  
  10.         if (n % i == 0)  
  11.              return false;
  12.     }  
  13.     return true;  
  14. }  


对算法进行改进,将判断能否被小于sqrt(n)的数整除,改为能否被小于sqrt(n)的素数整除,可以节省很多计算量,大大减少计算的次数。这样就需要将以前计算的素数都记下来,所以使用一个全局的vector prim_vec 来记录计算过的素数。

 

对素数的判断代码改进如下:

[cpp] view plain copy  print?

  1. vector<int> prim_vec;  
  2. bool isprime(int n)  
  3. {  
  4.     if (n < 2)         
  5.         return false;  
  6.     if (n == 2)  
  7.         return true;  
  8.     if(n %2 == 0)  
  9.         return false;  
  10.     int sq = sqrt(n);  
  11.     int len = prim_vec.size();  
  12.     for (int index=0; index<len;index++)  
  13.     {  
  14.         int tmp = prim_vec[index];  
  15.         if(tmp > sq)  
  16.             break //这句如果不加,也会TLE
  17.         if (n % tmp == 0)  
  18.             return false;  
  19.     }  
  20.     return true;  
  21. }  

 

 

 

题目完整代码如下:

 

[cpp] view plain copy  print?

  1. class Solution {  
  2. public:  
  3.     vector<int> prim_vec;  
  4.     bool isprime(int n)  
  5.     {  
  6.     if (n < 2)         
  7.             return false;  
  8.         if (n == 2)  
  9.             return true;  
  10.         if(n %2 == 0)  
  11.             return false;  
  12.         int sq = sqrt(n);  
  13.         int len = prim_vec.size();  
  14.         for (int index=0; index<len;index++)  
  15.         {  
  16.             int tmp = prim_vec[index];  
  17.             if(tmp > sq)  
  18.                 break;  
  19.             if (n % tmp == 0)  
  20.                 return false;  
  21.         }  
  22.         return true;  
  23.     }  
  24.     int countPrimes(int n) 
  25.     {  
  26.         int i =0, count=0;  
  27.         for (i=1; i<n; i++)  
  28.         {  
  29.             if (isprime(i))  
  30.             {  
  31.                 count++;  
  32.                 prim_vec.push_back(i);  
  33.             }  
  34.         }  
  35.         return count;  
  36.     }  
  37. };

 

这篇关于234. countprime的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/974851

相关文章

LeetCode--234 回文链表

题目 请判断一个链表是否为回文链表。 示例 示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val

【计算机毕业设计】234基于微信小程序的中国各地美食推荐平台

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板,帮助书写开题报告。 作者完整代码目录供你选择: 《Springboot网站项目》400套《ssm网站项目》800套《小程序项目》300套《App项目》500套《python网站项目》600套 ⚡感兴

leetcode 题号#234 回文链表

查看题目详情可点击此处。 题目 请判断一个链表是否为回文链表。 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 解题思路 首先理解回文的意思,回文就是正着读和反着读得到的结果都一样,那最直接的解题思路就是拷贝一份反转的链表,再与原链表从头结点开始比对,如果完全一致就是回文链表,但空间复杂度和时间复杂度都为 O

【索引】Codeforces Round #234 (Div. 2)

Problem A: Inna and Choose Options(400A) Problem B: Inna and New Matrix of Candies(400B) Problem C: Inna and Huge Candy Matrix(400C) Problem D: Dima and Bacteria(400D) Problem E: In

题目234 吃土豆

题目234 题目信息 运行结果 本题排行 讨论区 http://acm.nyist.net/JudgeOnline/problem.php?pid=234 吃土豆 时间限制: 1000 ms  |  内存限制: 65535 KB 难度: 4 描述 Bean-eating is an interesting game, everyone owns an M*

*Leetcode 234. Palindrome Linked List

https://leetcode.com/problems/palindrome-linked-list/description/ 有点意思。。 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x),

[LeetCode] 234. Palindrome Linked List

题目内容 https://leetcode-cn.com/problems/palindrome-linked-list/ Given a singly linked list, determine if it is a palindrome. Example 1:Input: 1->2Output: falseExample 2:Input: 1->2->2->1Output: tr

LeetCode--234. Palindrome Linked List

Problem: Given a singly linked list, determine if it is a palindrome. Follow up: Could you do it in O(n) time and O(1) space? Analysis: 判断一个单向链表是否是回文链表,要求O(n)的时间复杂度和O(1)的空间复杂度。 算法有以下几种: 遍历整个链

Leetcode #234 Palindrome Linked List

Given a singly linked list, determine if it is a palindrome. Follow up: Could you do it in O(n) time and O(1) space? 用o(n)的space来创建一个反向的链表,也能AC,时间是36ms,代码如下: class Solution {public:bool isPalind

leetcode 234 除自身以外数组的乘积

题目描述:给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。思路:建立两个数组 分别存储左,右两边除当前数字的累积乘。代码(java):public int[] solution(int[] nums) {i