hdu 1999 不可摸数 筛选素数 两次打表

不可摸数

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 8590    Accepted Submission(s): 2242

Problem Description

s(n)是正整数n的真因子之和。即小于n且整除n的因子和.比如s(12)=1+2+3+4+6=16.假设不论什么

数m,s(m)都不等于n,则称n为不可摸数.

Input

包括多组数据。首先输入T,表示有T组数据.每组数据1行给出n(2<=n<=1000)是整数。

Output

假设n是不可摸数。输出yes。否则输出no

Sample Input

3
2
5
8

Sample Output

yes
yes
no

Author

[email protected]

Source

ECJTU 2008 Spring Contest

思路:

就是筛选法打表。

代码例如以下:

<span style="font-size:14px;">#include<stdio.h>
int a[1001000];
int sum[1002];
int main()
{
 int n,i,j,m;
 scanf("%d",&n);
 for(i=1;i<500500;i++)//筛选法打表
 for(j=2*i;j<1001000;j+=i)
 a[j]+=i;
 for(i=1;i<1001000;i++)//对1000以内的可以取到数再次打表标记
 if(a[i]<=1000)
 sum[a[i]]=1;
 while(n--)
 {
  scanf("%d",&m);
  if(sum[m])
  puts("no");//puts自己主动加入换行符
  else
  puts("yes");
 }
 return 0;
}</span>
时间: 2024-12-10 18:52:14

hdu 1999 不可摸数 筛选素数 两次打表的相关文章

HDU 1999 不可摸数

/* 中文题意: 中文翻译: 题目大意:见红字(如下) 解题思路:打表,将每个数的合数之和存在一个数组之中 难点详解:用两个for循环写的,第二个for循环主要是解释两个数相乘不超过这个最大数的上限,下面的a[i*j]主要是用来记录合数之和,同时也保证了数组上限在最大值里面 关键点:求在1000以内合数之和,打表 解题人:lingnichong 解题时间:2014/7/31    17:52 解题感受:一开始错了几次,原因是数组开小了,后台数组很大,他又说对任意的m,所以数组要开很大才会满足题意

hdu 1999 不可摸数 水题。

不可摸数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 7966    Accepted Submission(s): 2024 Problem Description s(n)是正整数n的真因子之和,即小于n且整除n的因子和.例如s(12)=1+2+3+4+6=16.如果任何数m,s(m)都不等于n,则称n为不可摸数. Input 包

HDU 1999 不可摸数 (水题)

[题意简述]:中文题 [分析]:想法很简单,因为n的范围仅仅是  2<= n<=1000,所以根据题目描述,我只需要打出一个表即可解决问题,表里存放每一个S(i)的值,如果输入的n能与表中的值相对应,就不是不可摸数,相反便是不可摸数! 不过要注意这里边表的那个上线,我们可以试出来,最后我测试出的结果是5000左右. #include<iostream> using namespace std; int a[5000]={0}; int main() { int n,i,j,m,fl

hdoj 1999 不可摸数 【数学】

题意:... 简单来说,就是要找出50万以内的数的真因子之和,再做个标记 代码: #include <stdio.h> #include <string.h> #define M 500000 int a[M]; int ok[M]; void f() { int i, j; for(i = 1; i < M; i ++){ for(j = 1; j*i < M; j ++){ a[i*j]+=i; } } for(i = 1; i < M; i ++){ a[i

不可摸数 【杭电-1999】 附题

/* hdu 1999 不可摸数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 8274    Accepted Submission(s): 2122 Problem Description s(n)是正整数n的真因子之和,即小于n且整除n的因子和.例如s(12)=1+2+3+4+6=16.如果任何 数m,s(m)都不等于n,则称n

hdu 2136 (Largest prime factor)就是简单 的筛选素数法

Largest prime factor Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 7009    Accepted Submission(s): 2482 Problem Description Everybody knows any number can be combined by the prime number. Now

不可摸数(杭电1999)

/*不可摸数 Problem Description s(n)是正整数n的真因子之和,即小于n且整除n的因子和.例如s(12)=1+2+3+4+6=16.如果任何 数m,s(m)都不等于n,则称n为不可摸数. Input 包含多组数据,首先输入T,表示有T组数据.每组数据1行给出n(2<=n<=1000)是整数. Output 如果n是不可摸数,输出yes,否则输出no Sample Input 3 2 5 8 Sample Output yes yes no */ /*用打表法将 n的真因子

hdu how many prime numbers 筛选法求素数

/* * hdu How many prime numbers * date 2014/5/13 * state AC */ #include <iostream> #include <cmath> #include <cstdio> using namespace std; bool isPrime(int x) { int sqr=sqrt(x*1.0); for(int i=2;i<=sqr;i++) { if(x%i==0)return false; }

hdu 不可摸数

不可摸数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 8417    Accepted Submission(s): 2176 Problem Description s(n)是正整数n的真因子之和,即小于n且整除n的因子和.例如s(12)=1+2+3+4+6=16.如果任何 数m,s(m)都不等于n,则称n为不可摸数. Input