微众银行笔试题

第二题是求N以内所有是质数的幂的数字的个数

为啥只AC了30%呢,感觉代码没问题来着
全部评论
package 微众; import java.util.HashSet; import java.util.Scanner; import java.util.Set; public class Main2 { public static void main(String[] args) { //求指定范围内的素数和由素数组成幂次数 Set <Integer> set = new HashSet <>(); Scanner sc = new Scanner(System.in); int n=sc.nextInt(); //使用标记法 boolean [] isPrime=new boolean[n+1]; for(int i=2;i<=n;i++){ isPrime[i]=true; } for(int i=2;i*i<=n;i++){ if(!isPrime[i]){ continue; } for(int j=i*i;j<=n;j+=i){ isPrime[j]=false; } } //统计素数 for(int i=2;i<=n;i++){ if(isPrime[i]){ set.add(i); //对该数进行幂次运算 for(int j=1;Math.pow(i,j)<=n;j++){ //将幂次装入 set.add((int) Math.pow(i,j)); } } } System.out.println(set.size()); } }
点赞 回复 分享
发布于 2018-04-16 21:34
有没有老哥看看代码的 
点赞 回复 分享
发布于 2018-04-16 21:21
#include<iostream> #include<cstring> using namespace std; int isPrime[1001]; bool func(int num){     for (int i = 2; i < num; i++){         if (num%i == 0) isPrime[num] = 0;     }     if (isPrime[num] == -1) {         isPrime[num] = 1;         return true;     }     for (int i = 2; i < num; i++){         if (isPrime[i] == 1){             int buf = i;             while (buf <= num){                 if (buf == num) return true;                 buf *= i;             }         }     }     return false; } int main(){     int n;     cin >> n;     int res = 0;     memset(isPrime, -1, 1001);     for (int i = 2; i <= n; i++){         if (func(i)) res++;     }     cout << res;     return 0; }
点赞 回复 分享
发布于 2018-04-16 21:17
我感觉是丑数的变种
点赞 回复 分享
发布于 2018-04-16 21:11
先判断素数与否 然后把素数的幂次全部加进去 
点赞 回复 分享
发布于 2018-04-16 21:10

相关推荐

一表renzha:手写数字识别就是一个作业而已
点赞 评论 收藏
分享
叶扰云倾:进度更新,现在阿里云面完3面了,感觉3面答得还行,基本都答上了,自己熟悉的地方也说的比较细致,但感觉面试官有点心不在焉不知道是不是不想要我了,求阿里收留,我直接秒到岗当阿里孝子,学校那边的房子都退租了,下学期都不回学校,全职猛猛实习半年。这种条件还不诱人吗难道 然后现在约到了字节的一面和淘天的复活赛,外加猿辅导。华为笔试完没动静。 美团那边之前投了个base广州的,把我流程卡麻了,应该是不怎么招人,我直接简历挂了,现在进了一个正常的后端流程,还在筛选,不知道还有没有hc。
点赞 评论 收藏
分享
评论
点赞
8
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务