您的位置:首页 > 其它

ural 1091

2012-09-28 07:45 281 查看
题目:http://acm.timus.ru/problem.aspx?space=1&num=1091

题意:从 s 个数里挑出 k 个, 这个 k 个数的共因子大于 1 一共有多少种方法

直接暴搜,注意剪枝优化

View Code

const int N = 31630;
int prime
;
bool vis
;
int num;
void is_prime()
{
int i,j;
for(i = 2; i < N ;i++)
{
if(!vis[i])
{
prime[num ++] = i;
for(j = 1; j * i < N; j++)
{
if(vis[i * j]) continue;
vis[i * j] = true;
}
}
}
}
int main()
{
num = 0;
is_prime();
int n,t,i;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
//cout<<prime[n - 1]<<endl;
for(i = 0; i < num; i++)
if(n % prime[i] == 0) break;
int p = prime[i], q = n / prime[i];
//cout<<"p = "<<p<<" "<<q<<endl;
printf("0 1");
for(i = q; i < n; i += q)
{
if((i - 1) % p == 0) printf(" %d",i);
if((i + 1) % p == 0) printf(" %d",i + 1);
}
printf("\n");

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: