hdu 1999 不可摸数(筛法求数n的真因子之和)
来源:互联网 发布:js设置div不可见 编辑:程序博客网 时间:2024/05/16 12:23
题目地址
题目大意:s(n)是正整数n的真因子之和,即小于n且整除n的因子和.例如s(12)=1+2+3+4+6=16.如果任何数m,s(m)都不等于n,则称n为不可摸数,判断一个1000以内的数是否为不可摸数
解题思路:要判断一个数n是否为不可摸数,定要确定是否完全没有一个正整数m的真因子之和,那就得将1000以内的真因子之和找出来,求真因子之和用筛法
题目大意:s(n)是正整数n的真因子之和,即小于n且整除n的因子和.例如s(12)=1+2+3+4+6=16.如果任何数m,s(m)都不等于n,则称n为不可摸数,判断一个1000以内的数是否为不可摸数
解题思路:要判断一个数n是否为不可摸数,定要确定是否完全没有一个正整数m的真因子之和,那就得将1000以内的真因子之和找出来,求真因子之和用筛法
#include <iostream>#include <cstdio>#include <cmath>#include <algorithm>#include <cstring>#include <queue>#include <string>using namespace std;const int maxn = 1000000+10;const int maxm = 1000+10;int sum[maxn],sign[maxm];int main(){ memset(sum,0,sizeof(sum)); memset(sign,0,sizeof(sign)); for(int i = 1; i <= 500000; i++)//筛法求s(n),并用数组sum存起来 { for(int j = 2*i; j <= 1000000; j += i) { sum[j] += i; } } for(int i = 1; i <= 1000000; i++)//标记1000以内的s(m) if(sum[i] < 1000) sign[sum[i]] = 1; int t,n; scanf("%d",&t); while(t--) { scanf("%d",&n); if(!sign[n]) puts("yes"); else puts("no"); } return 0;}
0 0
- hdu 1999 不可摸数(筛法求数n的真因子之和)
- hdu 1999 不可摸数(朴素打表法求质因子之和)
- HDU 1999不可摸数(筛选因子)
- HDU 1215 求N的因子之和
- java求n以内的完全数。所谓的完全数即如果一个数字的所有真因子之和等于自身,则称它为“完全数”或“完美数”
- hdu 3501 Calculation 2(<n且与n不互质的数之和)
- HDU 6069 求区间[L,R]每个数的k次方的因子数之和
- HDU 1999 不可摸数 (水题)
- HDU 1999 不可摸数(数论)
- hdu 1999 不可摸数
- hdu 1999-不可摸数
- hdu 1999不可摸数
- HDU 1999 不可摸数
- HDU 1999 不可摸数
- hdu 1999 不可摸数
- HDU--1999-不可摸数
- hdu 1999 不可摸数
- hdu-1999-不可摸数
- 二叉树左右子树的交换
- strust2文件上传
- HDU 4986 Little Pony and Alohomora Part I(递推+欧拉常数)
- HDOJ Intersection 5120【环相交面积】
- HDUOj 简单计算器
- hdu 1999 不可摸数(筛法求数n的真因子之和)
- PHP---运行时出现waring如何取消
- Palindrome Partitioning
- 总结分享下日常生活中用到的一些功能,很好很强大,功能很多有20个,希望大家喜欢
- Hdu 5326 2015多校对抗赛三
- 判断两棵二叉树是否相似
- 2015年8月1日总结
- get()用法
- 【CODEFORCES】 D. Red-Green Towers