58,454
社区成员
发帖
与我相关
我的任务
分享
import java.util.ArrayList;
import java.util.Scanner;
public class test8 {
public static ArrayList<Integer> v1=new ArrayList<Integer>();
public ArrayList<Integer> v2=new ArrayList<Integer>();
public static int i1=1;//表示的是第i个数是要进行迭代的数
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int a=scanner.nextInt(); //a是小的那个数
int b=scanner.nextInt(); //b是大数
for(int i=0;i<=b;i++){
v1.add(i);
}
test8 t=new test8();
t.dieDai(2);
int j=0;
for(int l=1;l<v1.size();l++){
if(v1.get(l)>=a&&v1.get(l)<=b){
j++;
}
}
System.out.println("性运输的个数是:"+(j-1));
}
public void dieDai(int lucky){
int temp=0;
if(lucky>=v1.size()){
return ;
}
for(int i=1,j=0;i<v1.size();i++){
if(i%lucky==0){
v2.add(v1.get(i));
j++;
}
}
v1.removeAll(v2);
v2.removeAll(v2);
i1+=1;
lucky=v1.get(i1);
dieDai(lucky);
}
}
这段代码效率很低,但是很容易懂,采用的是递归方法!
import java.util.Scanner;
public class XingYun2
{
static int a[]=new int[500000+1];
static void isPrime(int start,int a[],int len)
{
int k=start,num=a[start];
for(int i=k;i<len;i++)
{
if(i%num!=0) a[k++]=a[i];
}
if(num<len)isPrime(start+1,a,k);
}
public static void main(String[] args)
{
int len=500000,kinds=0;
for(int i=1;i<len;i++) a[i]=2*i-1;
isPrime(2,a,len);
Scanner cin=new Scanner(System.in);
int m=cin.nextInt();
int n=cin.nextInt();
long sta=System.currentTimeMillis();
for(int i=1;i<len;i++)
{
if(a[i]>m && a[i]<n) kinds++;
if(a[i]>=n) break;
}
System.out.println(kinds);
System.out.print("时间:");
System.out.println(System.currentTimeMillis()-sta);//时间
}
}
//1 1000000
//499998
//时间:4ms
import java.util.ArrayList;
import java.util.List;
//这是最烂的实现 测试1000*1000时用时较长 二十秒左右
public class LuckNumber {
public static void main(String[] args) {
//初始化
int m=30;
int n=69;
if(m==1){
m=2;
}
List nums=new ArrayList();
for(int i=1;i<=n;i++){
nums.add(i);
}
for(int i=0;i<nums.size();i++){
if(nums.get(i)==null){
nums.remove(i);
}
}
List nums1=new ArrayList();
for(int i=1;i<=m;i++){
nums1.add(i);
}
for(int i=0;i<nums1.size();i++){
if(nums1.get(i)==null){
nums1.remove(i);
}
}
nums=pro(nums);
nums1=pro(nums1);
for(int i=0;i<nums.size();i++){
if((Integer)nums.get(i)==m||(Integer)nums.get(i)==n){
nums.remove(i);
}
}
for(int i=0;i<nums1.size();i++){
if((Integer)nums1.get(i)==m||(Integer)nums1.get(i)==n){
nums1.remove(i);
}
}
System.out.println(nums.size()-nums1.size());
}
static List pro(List nums){
int c=1;
int i=(Integer) nums.get(c);
while(nums.size()/i>=1){
List nums_s=new ArrayList();
nums_s.addAll(nums);
nums.clear();
for(int a=0;a<nums_s.size();a++){
if((a+1)%i==0){
nums_s.set(a, null);
}
}
for(int a=0;a<nums_s.size();a++){
if(nums_s.get(a)!=null){
nums.add(nums_s.get(a));
}
}
c++;
if((Integer)nums.get(0)==1){
if(nums.size()>c-1){
i=(Integer) nums.get(c-1);
}
}
else if(c<nums.size()-1){
i=(Integer) nums.get(c);
}
}
return nums;
}
}
import java.util.List;
import java.util.Scanner;
import java.util.Vector;
public class test83 {
public static List xy(List list, int i) {
List lst = new Vector();
if (i >= list.size()) //递归出口
return list;
int t = (Integer) list.get(i);//获取幸运数字
if (t == 1) { //1这是特殊情况
t = 2;
}
int l = list.size() / t;//移除转移操作执行l次
int y = list.size() % t;//计算list剩余数目
for (int k = 0; k < l; k++) {
for (int j = 0; j < (t - 1); j++) {
lst.add(list.remove(0));//将保留数放入新list,放入数目与幸运数字大小有关
}
list.remove(0);//移除掉非保留数
}
if (y > 0) {
for (int k = 0; k < y; k++) {
lst.add(list.remove(0));//将list剩余数加入新list
}
}
i++;//幸运数游标加1
List nlst = xy(lst, i);//递归直到递归出口
return nlst;
}
public static int p(int m, int n) {//筛选符合条件的数字数目
List list = new Vector();
for (int i = 1; i <= m + n; i++) {
list.add(i);
}
List nl = xy(list, 0);
int c = 0;
for (int j = 0; j < nl.size(); j++) {
int nn = (Integer) nl.get(j);
if (m < nn && n > nn) {
c++;
}
}
return c;
}
public static void main(String[] args) {
// System.out.print("用户输入:");
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
int n = sc.nextInt();
sc.close();
int res = p(m, n);
System.out.println(res);
}
}