- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
每个正整数除以某个数字,该数字的表示形式(以 10 为底)仅包含零和一。
可以证明:
考虑数字 1、11、111、1111 等直到 111...1,其中最后一个数字有 n+1 位。称这些数字为 m1、m2、...、mn+1。每个都有一个除以 n 的余数,并且其中两个余数必须相同。因为它们有 n+1 个,但余数只能取 n 个值。这是著名且有用的“鸽巢原理”的应用;
假设余数相同的两个数是mi和mj,我 < j。现在从较大的中减去较小的。结果数 mi−mj 由 j - i 个 1 后跟 i 个零组成,必须是 n 的倍数。
但是如何找到最小的答案呢?并且高效?
最佳答案
这道题等于用10i mod n(对于每个i,最多可以用一次)得到n的和m。这就像背包问题或子集和问题。这样,动态规划将完成任务。
在动态规划中,复杂度是O(k*n)
。 k 是答案中的位数。对于 n<105,此代码完美运行。
代码:
#include <stdio.h>
#define NUM 2000
int main(int argc, char* argv[])
{
signed long pow[NUM],val[NUM],x,num,ten;
int i,j,count;
for(num=2; num<NUM; num++)
{
for(i=0; i<NUM; pow[i++]=0);
count=0;
for(ten=1,x=1; x<NUM; x++)
{
val[x]=ten;
for(j=0; j<NUM; j++)if(pow[j]&&!pow[(j+ten)%num]&&pow[j]!=x)pow[(j+ten)%num]=x;
if(!pow[ten])pow[ten]=x;
ten=(10*ten)%num;
if(pow[0])break;
}
x=num;
printf("%ld\tdivides\t",x=num);
if(pow[0])
{
while(x)
{
while(--count>pow[x%num]-1)printf("0");
count=pow[x%num]-1;
printf("1");
x=(num+x-val[pow[x%num]])%num;
}
while(count-->0)printf("0");
}
printf("\n");
}
}
附言:OEIS 中的此序列.
关于algorithm - 如何找到除以给定数字的只有 0 和 1 的最小数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28436888/
例如,我有一个父类Author: class Author { String name static hasMany = [ fiction: Book,
代码如下: dojo.query(subNav.navClass).forEach(function(node, index, arr){ if(dojo.style(node, 'd
我有一个带有 Id 和姓名的学生表和一个带有 Id 和 friend Id 的 Friends 表。我想加入这两个表并找到学生的 friend 。 例如,Ashley 的 friend 是 Saman
我通过互联网浏览,但仍未找到问题的答案。应该很容易: class Parent { String name Child child } 当我有一个 child 对象时,如何获得它的 paren
我正在尝试创建一个以 Firebase 作为我的后端的社交应用。现在我正面临如何(在哪里?)找到 friend 功能的问题。 我有每个用户的邮件地址。 我可以访问用户的电话也预订。 在传统的后端中,我
我主要想澄清以下几点: 1。有人告诉我,在 iOS 5 及以下版本中,如果您使用 Game Center 设置多人游戏,则“查找 Facebook 好友”(如与好友争夺战)的功能不是内置的,因此您需要
关于redis docker镜像ENTRYPOINT脚本 docker-entrypoint.sh : #!/bin/sh set -e # first arg is `-f` or `--some-
我是一名优秀的程序员,十分优秀!