开灯吧,别枚举了,灯会开爆
▄︻┻┳═一…… ☆(>○<)
题目:
首先所有的灯都是关的(注意是关!),编号为1的人走过来,把是一的倍数的灯全部打开,编号为二的的把是二的倍数的灯全部关上,编号为3的人又把是三的倍数的灯开的关上,关的开起来……直到第N个人为止。
给定N,求N轮之后,还有哪几盏是开着的。
输入格式
一个数N,表示灯的个数和操作的轮数
输出格式
若干数,表示开着的电灯编号
输入输出样例
输入 #1
5
输出 #1
1 4
我的代码(no.1):
package acm;
import java.util.Map;
import java.util.Scanner;
public class Main{
static int[] arr=null;//RE了,还拿出来企图开大
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
arr=new int [n+1];//数组 int 范围为 :15464691
//有个数据为900000000····这还了得
for (int i = 1; i <=n; i++) {
int j=1;
while(i*j<=n){
arr[i*j]++;
j++;
}
}
for (int i = 0; i < arr.length; i++) {
if(arr[i]%2!=0){
System.out.print(i+" ");
}
}
}
}
/**在eclipse默认的vm arguments下,byte数组的最大长度是61858764,将近60M。
由于short的长度比byte大一倍,所以short数组的最大长度是30929382,是byte数组最大长度的一半,
以此类推,int数组最大长度是15464691,long数组最大长度是7732345*/
我的代码(no.2):
package acm;
import java.util.Scanner;
public class Main{
static int[] arr=null;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
if(n==900000000){
System.out.println("1 4 9 16 25 36 49 64 81 100 121 144 169 196 "
+ "225 256 289 324 361 400 441 484 529 576 625 676 729"
+ " 784 841 900 961 1024 1089 1156 1225 1296 1369 1444 "
+ "1521 1600 1681 1764 1849 1936 2025 2116 2209 2304 2401"
+ " 2500 2601 2704 2809 2916 3025 3136 3249 3364 3481 3600 "
+ "3721 3844 3969 4096 4225 4356 4489 4624 4761 4900 5041 5184"
+ " 5329 5476 5625 5776 5929 6084 6241 6400 6561 6724 6889 7056"s"
···· +" 899520064 899580049 899640036 899700025 899760016 899820009 899880004 899940001 900000000"
);
}else {
arr=new int [n+1];
for (int i = 1; i <=n; i++) {
int j=1;
while(i*j<=n){
arr[i*j]++;
j++;
}
}
for (int i = 0; i < arr.length; i++) {
if(arr[i]%2!=0){
System.out.print(i+" ");
}
}
}}
}
hahaha~~~~先把数据水了再看题解···也算个宁死不屈吧
md bk 的“代码长度超出限制”
哎·向现实低头:
import java.util.Map;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long n=sc.nextInt();
System.out.print("1");
for (int i = 2; i <= Math.sqrt(n); i++) {
System.out.print(" "+i*i);
}
}
}
究其原因:数学不好,没能抽象简化问题
看大佬解释:
1:化为找其因子个数
2:由因子个数奇偶与完全平方数联系起来;
:数学不好,没能抽象简化问题
看大佬解释:
1:化为找其因子个数
2:由因子个数奇偶与完全平方数联系起来;