文章
2
粉丝
136
获赞
1
访问
10.4k
import java.util.Scanner; public class SpecialNum { /* 设一个正整数既是平方数又是立方数时,称之为Special数。 输入包含多组测试用例, 第一行输入测试数据的组数, 接着在后续每行输入n的时候, 请输出"1到n中"包含的所有Special数的个数。 n<= 1000000000 */ //注1: 别摁循环 时间复杂度太高 //注2: 开根算太慢了 用乘方逆运算 //判断是否Special:用double存数据 开根之后减(int)看他是否为0 //核心: 用数组记录1-1000000000中所有special数 public static int IsSqrt(double j){ if (Math.sqrt(j) - (int) Math.sqrt(j) == 0) return 1; return 0; } public static void main(String[] args) { Scanner sc= new Scanner(System.in); //先判断哪些是special数 int[] special = new int[31]; //可以预判 int sp = 0; //这里存在大量数的开根 会有不必要运算 比如10000开根和9999开根其实有大量重复计算 // for (int i=1; i<=1000000000; i++) // if(IsSpecial(i)==1) // special[sp++] = i; //用乘方法只用一次从1-1000000000的遍历 甚至都没有这么多次 for (int i=1; i*i*i<=1000000000; i++) ...
登录后发布评论
暂无评论,来抢沙发